背景:qt應用執行時,鍵盤esc按下導致程式異常退出,需要在程式整個執行期間攔截esc這個按鍵響應。
qt整個執行機制是事件迴圈,在執行期間如果需要攔截特定的任務,qt提供乙個便捷的處理機制,就是事件過濾器。因為過濾器的定義在qobject類中,所以只要繼承了這個類,就可以使用installeventfilter()這個方法來使能過濾器。當然預設的過濾器不會過濾任何行為,如果想過濾特定行為,則需要對過濾器進行重寫。
qobject類中定義的eventfilter():
virtual bool qobject::eventfilter ( qobject * watched, qevent * event );
此方法返回bool,過濾就返回true,否則flase。
重寫事件過濾器:
#include class myeventfilter : public qobject
}return false;
}};
完成對事件過濾器的重寫後,需要在需要攔截的頁面進行安裝,如果是在子頁面(子程序)中進行安裝,那麼它只在當前頁面生效,並不會影響到別的頁面,如果想在全域性使用,那麼就需要在第乙個基頁面中安裝。安裝是呼叫qobject類中的乙個方法。
qobject類中定義的安裝方法:
void qobject::installeventfilter ( qobject * filterobj )
全域性過濾這個鍵盤事件:
a.installeventfilter(new myeventfilter);
最終效果:
qt應用啟動期間,不會響應按壓esc鍵,程式不會退出,完成了最初目的,類似操作可以攔截更多事件。
Qt攔截特定按鍵
背景 qt應用執行時,鍵盤esc按下導致程式異常退出,需要在程式整個執行期間攔截esc這個按鍵響應。qt整個執行機制是事件迴圈,在執行期間如果需要攔截特定的任務,qt提供乙個便捷的處理機制,就是事件過濾器。因為過濾器的定義在qobject類中,所以只要繼承了這個類,就可以使用installevent...
QT控制項 按鍵組
qt的按鍵組主要有6種,分別是 qpushbutton qtoolbutton qdadiobutton qcheckbox qcommandlinkbutton qbuttonbox 下面,將對各個空間進行簡要的介紹以及使用方法 一,push button 此控制項通常用得是最多,每個軟體基本少不...
攔截電源關機按鍵 自定義功能
攔截電源關機按鍵 自定義功能 忽略gnome自帶的電源管理 sed i s handlepowerkey poweroff handlepowerkey ignore g etc systemd logind.conf systemctl status systemd logind yum inst...