進階 match-case

match-case 不是 switch-case

需求是我們希望用戶不只可以按某按鈕來完成動作, 也可以指定的快速鍵來快速鍵. 其中當單按下數字鍵 1, 2, 或者 3時, 代表要改顏色. 但對於要進行諸如儲存等動作, 那就必須加按 Ctrl, 例如: Ctrl+S 為儲存的快速鍵.

用 if-elif-else 實作, 語法也很直觀, 除了判斷按了什麼鍵 event.key(), 必要時再加一個條件 (event.modifiers() & Qt.ControlModifier) 來偵測是否與 Ctrl 一起按下.

比較上面 if-elif 與下面改用 match-case, 只有兩個與前例稍有不同:

  1. case XYZ 後可加 if 再列上條件

  2. case _: 代表所有case沒捕獲到的漏網之魚

Structural Pattern Matching, 有更複雜的樣式比對, 我們可以用 match event.key(), event.modifiers(): 來組合兩個條件, 按下什麼鍵, 與搭配一起按的修飾鍵(Ctrl, Alt, Shift). 舉例:

case Qt.Key_S, Qt.ControlModifier: 就代表 Ctrl+S

case Qt.Key_1, _: 就代表只管按下數字1, 不在乎有無按下修飾鍵(Ctrl, Alt, Shift)