2016-04-27 39 views
1

在Windows上,有幾個鍵綁定用於標準操作。例如,對於拷貝,可以使用Ctrl + CCtrl + InsertQAction keyBindings

如何用Qt處理?這是我做過什麼:

  1. 我的鍵綁定與QKeySequence.keyBindings的列表()。
  2. 我創建2動作,一個用於Ctrl + C鍵,另一個爲按Ctrl +插入

它似乎工作。

問題:是否正確的方式來處理與Qt的鍵綁定?

完整的源代碼:

from sys import argv, exit 
from PyQt4.QtGui import QApplication, QWidget, QAction, QKeySequence 


class Widget(QWidget): 
    def __init__(self): 
     QWidget.__init__(self) 
     for key in QKeySequence.keyBindings(QKeySequence.Copy): 
      action = QAction("Copy", self) 
      action.triggered.connect(self._copy) 
      action.setShortcut(key) 
      self.addAction(action) 

    def _copy(self): 
     print("Copy!") 

print("On Windows, use Ctrl+C or Ctrl+Insert to copy.") 
app = QApplication(argv) 
w = Widget() 
w.show() 
exit(app.exec_()) 

回答

3

你只需要一個動作,並QAction::setShortcuts()通話。

action = QAction("Copy", self) 
action.setShortcuts(QKeySequence.keyBindings(QKeySequence.Copy)) 
action.triggered.connect(self._copy) 
+0

謝謝!我不知道setShortcuts()。然而,關於addAction(),如果我刪除它,它不適用於我。 –

+0

這很奇怪。也許我錯了。 : -/ –

+1

是的,肯定需要'addAction',否則它會以什麼順序等等......它不會假定佈局......另外它需要準確地告訴它是什麼部件來粘貼它(例如,通常動作是定義爲主窗口的子項,但實際上添加到工具欄中,而不是直接添加到主窗口中)。奇怪的是,即使你沒有用圖標顯示動作,但只能通過鍵盤快捷鍵使用它,你需要將它添加到一個小部件:http://stackoverflow.com/questions/1346964/use-qaction-without-adding -to-menu-or-toolbar?rq = 1 – neuronet