Qt的子控制項如何接收主視窗的手勢事件

2021-07-24 10:43:58 字數 692 閱讀 5968

首先我建了乙個新的qt應用,這個應用有三個類,乙個是qt的mainwindow

另外乙個可以接收手勢的widget,最後是我自己擴充套件的可以接收手勢的button.

程式執行後的結果是這樣的:

1、 我點button,button可以正常處理接收到的手勢

2、 我點widget的部分,widget可以接收它自己的手勢,這樣就出現了乙個問題。

如果乙個手勢的作用範圍只是button而手勢的處理確是widget,那麼這樣的手勢

在使用者看來就是沒有被識別。

解決上述問題可以用到qt的事件過濾器:

乙個事件過濾器的安裝需要下面2個步驟:

1、 呼叫installeventfilter()註冊需要管理的物件。

2 、在eventfilter()裡處理需要管理的物件的事件。

於是我在每個類裡面都註冊了這個事件過濾器,結果發現和情況1的現像一樣。

最近我看了qt關於這部分的說明。

終於解決了問題。

1、 installeventfilter()要在主視窗的類裡面呼叫,那麼所有的事件都會先傳送給主視窗,

由主視窗類的eventfilter(),來決定收到事件後的具體動作。

比如我收到乙個事件,我需要讓button處理,那麼我就呼叫button的eventfilter();

或是呼叫這個類的具體事件處理方法。這個就解決了上述問題。

如何獲取qt控制項的子控制項

我們知道,所有的qt控制項都繼承自qobject,而qobject有乙個屬性叫做objectname。我們可以利用這個屬性。查詢物件的方法,可以利用findchild 和fildchildren 函式原型如下 t qobject findchild const qstring name qstrin...

Qt中父視窗呼叫子視窗的控制項

父視窗為a9mechanical,它用來查詢資料庫中滿足條件的資料,並且顯示在控制項tableview中,當雙擊tableview中某一行資料時,改行資料的最後一列的內容顯示在子視窗的textedit控制項中 子視窗為showcontent,它用來顯示tableview中雙擊選中的某行資料。需要將s...

主視窗中處理模態子視窗的狀態

做的專案,主視窗顯示乙個介面,然後再建立幾個非模態視窗顯示,如果使用者按鍵盤的乙個cancel鍵,系統會給主視窗傳送乙個訊息,主視窗需要處理這個訊息,關閉當前的非模態子視窗,然後顯示上乙個子視窗,在主視窗的pretranslatemessage中捕獲到了這個訊息,然後呼叫下面的模組進行了處理 定義了...