fromby vic.ming
2009-07-01 16:24:08
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設定組合鍵
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...