最近需要更改一個GUI,原eventfilter安裝在mainwindow中ui->boardView 下監聽左右鍵,但是我需要將監聽的事件替換為自定義事件 (當某個變數超過閾值)。但是在main.cpp中我需要手動send事件,但是只能send給mainwindow w, 而不能到ui->boardView,事件監測器也無法監聽事件。相關代碼可見于https://stackoverflow.com/questions/60424216/how-to-use-eventfilter-under-child-widget-to-catch-self-define-event 或知乎https://www.zhihu.com/question/375221137
uj5u.com熱心網友回復:
5:29發的帖子void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority)
第一個引數是接收者的物件
修改為QCoreApplication::postEvent(ui->boardView, .....),ui->boardView視窗才可以接收到事件
uj5u.com熱心網友回復:
問題是ui 定義在mainwindow內,一旦我在main.cpp中修改為QCoreApplication::postEvent(ui->boardView, .....), 編譯的時候就報錯 ui:used of undeclared identifier, 有什么辦法可以解決呢?uj5u.com熱心網友回復:
你估計沒有真正了解event機制。一個物件要能接收并處理event首先要繼承自QObject,其次要自己實作event(),第三:該物件要啟動eventloop.一般有eventloop的類基本上都有這么一個函式啟動eventloop:exec()uj5u.com熱心網友回復:
如果只是簡單的解決這個編譯報錯,你可以在MainWindow中寫一個方法將ui->boardView物件拋出來
uj5u.com熱心網友回復:
怎么做呢?return嗎?uj5u.com熱心網友回復:
就是return啊,你試一下就知道了
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/58685.html
標籤:Qt
