Qt獲取組合鍵

2021-06-26 19:46:54 字數 1814 閱讀 7053

ctrl+enter傳送資訊的實現

在現在的即時聊天程式中,一般都設定有快捷鍵來實現一些常用的功能,類似qq可以用ctrl+enter來實現資訊的傳送。

在qt4中,所有的事件都繼承與qevent這個類,以下是用qevent來實現快捷鍵的功能。

首先所有qt類的基類qobject有乙個成員函式installeventfilter,這個函式是用來將乙個事件處理器和該qobject繫結起來,所以就有了我下面的想法。

首先在chat類定義乙個eventfilter,該函式是乙個虛函式,可以由子類進行更改。所以宣告eventfilter如下:

virtual bool eventfilter(qobject *obj, qevent *e);

看了下qt文件對於這個函式的宣告的解釋,大概意思就是如果你要過濾某個事件就返回false,如果要使用某個事件就返回true。

我想在這個函式中加入對enter鍵和ctrl+enter組合鍵的判斷,具體檢視qkeyevent類的文件

qkeyevent類中有函式key和modifier,key函式返回的是發生時間的按鍵值,modifier返回的而是修飾鍵,qt所支援的修飾鍵如下:

constant                         value               description

qt::nomodifier                 0x00000000       no modifier key is pressed.

qt::shiftmodifier              0x02000000       a shift key on the keyboard is pressed.

qt::controlmodifier           0x04000000       a ctrl key on the keyboard is pressed.

qt::altmodifier                0x08000000       an alt key on the keyboard is pressed.

qt::metamodifier             0x10000000       a meta key on the keyboard is pressed.

qt::keypadmodifier          0x20000000       a keypad button is pressed.

qt::groupswitchmodifier   0x40000000       x11 only. a mode_switch key on the keyboard is pressed.

所以可以重寫eventfilter函式來實現快捷鍵的功能,可以根據qkeyevent的key和modifire來分別是enter還是ctrl+enter被按下。

重寫eventfilter的函式如下:

}
return false;
}

然後把這個過濾器用installeventfilter函式安裝在聊天視窗的輸入框上(qtextedit),這樣就實現快捷鍵的功能了。

三鍵組合shift + ctrl + a的實現

只要在窗體中相應keypressevent事件函式即可。

}

鍵盤按住ctrl鍵 + 滑鼠左鍵的實現

在窗體中相應mousepressevent事件函式在其中檢測ctrl鍵是否按住即可。

}
}

Qt獲取組合鍵

ctrl enter傳送資訊的實現 在現在的即時聊天程式中,一般都設定有快捷鍵來實現一些常用的功能,類似qq可以用ctrl enter來實現資訊的傳送。在qt4中,所有的事件都繼承與qevent這個類,以下是用qevent來實現快捷鍵的功能。首先所有qt類的基類qobject有乙個成員函式insta...

qt設定組合鍵

ctrl enter傳送資訊的實現 在現在的即時聊天程式中,一般都設定有快捷鍵來實現一些常用的功能,類似qq可以用ctrl enter來實現資訊的傳送。在qt4中,所有的事件都繼承與qevent這個類,以下是用qevent來實現快捷鍵的功能。首先所有qt類的基類qobject有乙個成員函式insta...

Qt中設定組合鍵

from by vic.ming 2009 07 01 16 24 08 ctrl enter傳送資訊的實現 在現在的即時聊天程式中,一般都設定有快捷鍵來實現一些常用的功能,類似qq可以用ctrl enter來實現資訊的傳送。在qt4中,所有的事件都繼承與qevent這個類,以下是用qevent來實...