2013-06-20 34 views
2

我正在用PythonQt構建一個GUI。標準的小部件非常有用,可以開箱即用。不過,我對鼠標手勢有一些想法。更確切地說,一個按鈕或標籤或文本,被點擊後,鼠標被按住,移動鼠標四周有特殊效果。如何捕獲任意QWidget上的鼠標事件?

什麼是需要增加對以下事件

  • 鼠標點擊了窗口小部件,而這是明顯的
  • 鼠標移動到X鼠標支持,Y(實時)
  • 鼠標發佈

到一個任意的小部件?


現在我想通過A類,它繼承QAbstractItemView和擁有QWidget做到這一點。然而,沒有任何工作和

NotImplementedError: QAbstractItemView.verticalOffset() is abstract and must be overridden

+0

QAbstractItemView是,好,**抽象**你必須實現所有純虛擬方法來實例化它.. – Trompa

回答

2

QAbstractItemView對您的任務沒有幫助。

您可以使用installEventFilter在任意小部件上安裝事件過濾器。您的過濾器類必須從QObject繼承。該文檔包含一些有用的示例。見QObject::installEventFilter。如果要一次性在所有小部件上安裝篩選器,則可以將其安裝爲QApplication實例。

另一種選擇是子類QWidget(或任何其它的QWidget派生類)並重新實現其mousePressEventmouseMoveEventmouseReleaseEvent虛函數。

+0

我剛剛在A中繼承了QWidget,現在我開心地使用mousePressEvent()來獲取鼠標信息。不知道這是否和你的答案一樣好,儘管:( – Vorac

+0

如果從QWidget繼承創建新的類對你很方便,這是一個很好的解決方案,但是我的解決方案並不要求你爲每個部件創建新的類,它可以是在某些情況下更方便。 –