Qt 組合鍵的實現

2021-05-27 10:48:49 字數 1716 閱讀 4709

qt 組合鍵的實現

ctrl+enter傳送資訊的實現

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

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

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

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

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

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

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

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

如下:constant    value    description

qt::nomodifier    0×00000000    no modifier key is pressed.

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

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

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

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

qt::keypadmodifier    0×20000000    a keypad button is pressed.

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

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

重寫eventfilter的函式如下:

bool window::eventfilter(qobject *obj, qevent *e)

} return false;

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

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

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

void window::keypressevent(qkeyevent *e)

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

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

void window::mousepressevent(qmouseevent *e)}}

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設定組合鍵

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