日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT事件过滤器eventFilter函数

發布時間:2024/7/23 c/c++ 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT事件过滤器eventFilter函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt的事件模型一個強大的功能是一個QObject對象能夠監視發送其他QObject對象的事件,在事件到達之前對其進行處理。

假設我們有一個CustomerInfoDialog控件,由一些QLineEdit控件組成。我們希望使用Space鍵得到下一個QLineEdit的輸入焦點。一個最直接的方法是繼承QLineEdit重寫keyPressEvent()函數,當點擊了Space鍵時,調用focusNextChild():

void MyLineEdit::keyPressEvent(QKeyEvent *event) {if (event->key() == Qt::Key_Space) {focusNextChild();} else {QLineEdit::keyPressEvent(event);} }

這個方法有一個最大的缺點:如果我們在窗體中使用了很多不同類型的控件(QComboBox,QSpinBox等等),我們也要繼承這些控件,重寫它們的keyPressEvent()。一個更好的解決方法是讓CustomerInfoDialog監視其子控件的鍵盤事件,在監視代碼處實現以上功能。這就是事件過濾的方法。實現一個事件過濾包括兩個步驟:

  • 在目標對象上調用installEventFilter(),注冊監視對象。
  • 在監視對象的eventFilter()函數中處理目標對象的事件。
  • 注冊監視對象的位置是在CustomerInfoDialog的構造函數中:

    CustomerInfoDialog::CustomerInfoDialog(QWidget *parent): QDialog(parent) {…firstNameEdit->installEventFilter(this);lastNameEdit->installEventFilter(this);cityEdit->installEventFilter(this);phoneNumberEdit->installEventFilter(this); }

    事件過濾器注冊后,發送到firstNameEdit,lastNameEdit,cityEdit,phoneNumberEdit控件的事件首先到達CustomerInfoDialog::eventFilter()函數,然后在到達最終的目的地。
    下面是eventFilter()函數的代碼:

    bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event) {if (target == firstNameEdit || target == lastNameEdit|| target == cityEdit || target == phoneNumberEdit) {if (event->type() == QEvent::KeyPress) {QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);if (keyEvent->key() == Qt::Key_Space) {focusNextChild();return true;}}}return QDialog::eventFilter(target, event); }

    首先,我們看是目標控件是否為QLineEdit,如果事件為鍵盤事件,把QEvent轉換為QKeyEvent,確定被敲擊的鍵。如果為Space鍵,調用focusNextChild(),把焦點交給下一個控件,返回true通知Qt已經處理了這個事件,如果返回false,Qt將會把事件傳遞給目標控件,把一個空格字符插入到QLineEdit中。
    如果目標控件不是QLineEdit,或者事件不是Space敲擊事件,把控制權交給基類QDialog的eventFilter()。目標控件也可以是基類QDialog正在監視的控件。(在Qt4.1中,QDialog沒有監視的控件,但是Qt的其他控件類,如QScrollArea,監視一些它們的子控件)
    Qt的事件處理有5中級別:

  • 重寫控件的事件處理函數:如重寫keyPressEvent(),mousePressEvent()和paintEvent(),這是最常用的事件處理方法,我們已經看到過很多這樣的例子了。
  • 重寫QObject::event(),在事件到達事件處理函數時處理它。在需要改變Tab鍵的慣用法時這樣做。也可以處理那些沒有特定事件處理函數的比較少見的事件類型(例如,QEvent::HoverEnter)。我們重寫event()時,必須要調用基類的event(),由基類處理我們不需要處理的那些情況。
  • 給QObject對象安裝事件過濾器:對象用installEventFilter()后,所有達到目標控件的事件都首先到達監視對象的eventFilter()函數。如果一個對象有多個事件過濾器,過濾器按順序激活,先到達最近安裝的監視對象,最后到達最先安裝的監視對象。
  • 給QApplication安裝事件過濾器,如果qApp(唯一的QApplication對象)安裝了事件過濾器,程序中所有對象的事件都要送到eventFilter()函數中。這個方法在調試的時候非常有用,在處理非活動狀態控件的鼠標事件時這個方法也很常用。
  • 繼承QApplication,重寫notify()。Qt調用QApplication::nofity()來發送事件。重寫這個函數是在其他事件過濾器處理事件前得到所有事件的唯一方法。通常事件過濾器是最有用的,因為在同一時間,可以有任意數量的事件過濾器,但是notify()函數只有一個。
  • 許多事件類型,包括鼠標,鍵盤事件,是能夠傳播的。如果事件在到達目標對象的途中或者由目標對象處理掉,事件處理的過程會重新開始,不同的是這時的目標對象是原目標對象的父控件。這樣從父控件再到父控件,知道有控件處理這個事件或者到達了最頂級的那個控件。
    圖7.2顯示了一個鍵盤事件在一個對話框中從子控件到父控件的傳播過程。當用戶敲擊一個鍵盤,時間首先發送到有焦點的控件上(這個例子中是QCheckBox)。如果QCheckBox沒有處理這個事件,Qt把事件發送到QGroupBox中,如果仍然沒有處理,則最后發送到QDialog中。

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的QT事件过滤器eventFilter函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 无套内谢的新婚少妇国语播放 | 四虎精品久久 | 日韩黄网| 午夜福利视频 | 国产女人高潮的av毛片 | 亚洲综合成人亚洲 | 色导航在线| 窝窝视频在线 | 色婷婷婷婷色 | 中文字幕av在线免费观看 | 日本美女一级视频 | 日朝毛片| 亚洲精品在线一区二区 | 大胸喷奶水www视频妖精网站 | 久久久久国产一区二区三区潘金莲 | 亚洲不卡视频在线 | 麻豆污视频 | 国产传媒在线播放 | 日日爽夜夜操 | 国产二区在线播放 | 久久无码人妻丰满熟妇区毛片 | 国产又粗又深又猛又爽又在线观看 | 又粗又猛又爽又黄的视频 | 日本天堂影院 | www成人在线 | 免费看日产一区二区三区 | 麻豆免费观看视频 | 无码人妻精品一区二区三区9厂 | 亚洲午夜一区二区 | 北岛玲一区二区 | 开心激情综合 | 国产日批视频 | 亚洲精品鲁一鲁一区二区三区 | 日韩精品视 | 亚洲熟妇无码一区二区三区导航 | 妓院一钑片免看黄大片 | 女久久| 国产福利视频 | 高跟鞋肉丝交足91 | 亚洲老女人视频 | 成人在线观看亚洲 | 亚洲成人久久精品 | 日韩成人免费在线视频 | 久久国产亚洲精品无码 | 1区2区3区在线观看 久久久久久久久久久影院 成人网址在线观看 | 亚洲AV蜜桃永久无码精品性色 | www激情com| 日韩福利片在线观看 | 三级在线观看 | 久热精品视频在线播放 | 少妇愉情理伦片bd | 越南黄色一级片 | 日韩黄色影院 | 国产一级在线免费观看 | 中文综合网 | 欧美色图亚洲视频 | 4438全国成人免费 | 国产孕妇一区二区三区 | 中文字幕精品一区 | 亚洲精品电影院 | 九九热视频在线 | 97人妻一区二区精品免费视频 | 国产aa| 72成人网 | 久久午夜电影 | 欧美aaa级 | 中国黄色片子 | www.久久av.com| 偷拍第一页| 美女隐私无遮挡免费 | 亚洲色图 在线视频 | 波岛野结衣 | 一本到久久 | 久久午夜免费视频 | 一级黄色片免费 | 日本不卡一区 | 99中文字幕在线观看 | 可以看av的网站 | 国产看真人毛片爱做a片 | 中文字幕亚洲精品在线观看 | 91免费视频观看 | 性视频网| 手机看片欧美日韩 | 亚洲自啪 | 国产又粗又硬视频 | 萌白酱喷水视频 | 欧美色哟哟 | 亚洲一区二区三区91 | 国产在线不卡av | 老太脱裤让老头玩ⅹxxxx | 精品国产一二三 | 视频一区国产 | 亚洲精品毛片av | 久久毛片视频 | 99热网址 | 情欲少妇人妻100篇 黄色一级片欧美 | 91制服诱惑 | 国产中文字幕视频 | 国产无遮挡18禁无码网站不卡 |