qt設定組合鍵

2021-09-30 10:32:48 字數 2080 閱讀 4409

**

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的函式如下:

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

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

Qt獲取組合鍵

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

Qt獲取組合鍵

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