QScrollArea控制項的訊息分發攔截

2021-08-15 14:57:03 字數 903 閱讀 2456

qscrollarea控制項是乙個好東西。它裡面有乙個qwidget控制項。qwidget控制項的功能不必多說,和matplotlib連線就靠它。當qwidget控制項的大小超過了qscrollarea的大小之後,會有乙個可拖動的滾動條。可拖動的滾動條是可以接受滑鼠滾輪事件而向上向下滾動的。為了實現qmlcanvas(matplotlib.figurecanvas)的縮放功能,我連線了qwidget的滑鼠滾動事件和matplotlib。為此我設定了乙個開關,來切換滑鼠滾動是觸發qscrollarea控制項的滾動條,還是觸發qwidget控制項內的滑鼠滾動事件:。解決思路如下:

1.為qscrollarea安裝事件過濾器,當開關開時,發往該控制項的滑鼠滾動事件被攔截,不做響應,當開關關時,發往該處的事件作響應。

2.重寫qscrollarea這個類,重寫wheelevent事件。

方法1比較簡單,但是我測試了一下,並不能很好的起到攔截作用。呼叫了event.accept()方法之後的事件依然會被響應。因此轉用第二種方法:我重寫了這個類,重寫whellevent事件,當開關關閉時,將事件傳遞給父類,在父類中響應

from pyqt5.qtwidgets import qscrollarea as qsla

class qcscrollarea(qsla):

def __init__(self,parent):

qsla.__init__(self,parent)

def setrcs(self,rcs):

self.rcs=rcs

def wheelevent(self,event):

if self.rcs.zoomswi==true:

pass

else:

qsla.wheelevent(self, event)

pass

QScrollArea使用的小問題

好久沒有更新部落格啦啊啊啊。最近在寫程式,因為需要把兩個qwidget嵌入到同乙個介面上並且兩個介面的滾動條互不干擾,所以用到了qscrollarea,有兩個介面都使用了同乙個qscrollarea,大概是這樣的 首先需要出現介面a,所以把widgeta嵌入到scrollarea上 qscrolla...

PyQt5的QScrollArea元件的用法

pyqt5的qscrollarea元件為一種控制項容器,它的的作用是可以容納更多的元件,如果元件過多會出現滾動條,滾動條會根據容器的大小與內部元件的大小變化。使用方法可以參考如下例項 import sys from pyqt5.qtwidgets import class test qwidget ...

復合視窗的ActiveX控制項全屏及鍵盤訊息處理問題

讓應用程式全屏顯示其實思路很簡單 1.先儲存要全屏的視窗的父視窗 2.如果要全屏的視窗不是子視窗,設定其風格為ws child 3.設定視窗的父視窗為桌面 getdesktopwindow 4.移動視窗至全屏,並將視窗設為總在最上hwnd topmost if bfullscreen else 解決...