Qt 事件處理 快捷鍵

2021-08-08 01:55:11 字數 2760 閱讀 2221

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)

}}

乙個例子:

#include "mainwindow.h"  

#include #include #include #include #include #include #include mainwindow::mainwindow(qwidget *parent) :

qmainwindow(parent)

mainwindow::~mainwindow()

// 如果快捷鍵被設定,keypressevent就無法處理相應的按鈕事件

void mainwindow::keypressevent(qkeyevent *event)

case qt::key_return:// 被占用,失效

case qt::key_delete:// 被占用,失效

case qkeysequence::delete:// 捕獲不到,不能有這種方式處理

case qt::key_f1:

case qt::key_o:// 處理組合快捷按鈕

break;

} case qt::key_a:// 被視窗button占用,失效,不能處理

break;

} default:

} // if (event->key() == qt::key_o)

//

// }

}

void mainwindow::keyreleaseevent(qkeyevent *event)

void mainwindow::button1_click()

void mainwindow::button2_click()

qt高亮快捷鍵 Qt常用快捷鍵

f1 檢視幫助 f2 跳轉到函式定義 和ctrl 滑鼠左鍵一樣的效果 shift f2 宣告和定義之間切換 f4 標頭檔案和原始檔之間切換 ctrl 1 歡迎模式 ctrl 2 編輯模式 ctrl 3 除錯模式 ctrl 4 專案設定模式 ctrl 5 幫助模式 ctrl 6 輸出模式 alt 0 ...

QT實現Ctrl S快捷鍵(組合快捷鍵)

首先要清楚,ctrl s的組合快捷鍵中,ctrl是 修飾鍵 s是 按鍵值 平時使用的組合快捷鍵都是要先按下修飾鍵再按按值鍵,順序反了就沒有組合鍵的效果了 qt按鍵按下的事件qkeyevent中有key 和modifier key 函式返回的是發生時間的按鍵值,modifier 返回的而是修飾鍵。因此...

Qt快捷鍵 收藏

movement cursor keys 方向鍵 上下左右移動游標 page up down 上下翻頁 ctrl left right 方向鍵 左右逐個單詞移動游標 home end 游標移至本行的起始 末尾 ctrl home end 游標移動至整個文字的起始 末尾 ctrl up down pa...