關於QT快捷鍵設定的學習

2021-09-10 01:33:34 字數 2294 閱讀 6644

好久沒有來寫一些東西了,新的一年裡,寫部落格,可能會成為我的乙個計畫,不定期總結問題。

我喜歡在工作中,零星遇到的問題,或這有新的學習,我都會先使用為知筆記做下記錄,等後續有時間了,會整理成總結,放在這裡學習。也許簡單的幾行**只是為了增加記憶,但是時間久了再去回看也許就是自己的財富。

不囉嗦,說重點。

客戶需求:客戶端要支援設定快捷鍵以及通過快捷鍵操作,

環境:windows環境,qt開發的客戶端,多程序客戶端。

單程序客戶端處理方法:

qt很方便,直接為我們提供了接收鍵盤訊息的事件函式,我們重寫這些函式,然後做對應的處理,就可以了做到快捷鍵的功能。

1.重寫鍵盤事件

.**件,繼承qwidget等視窗,重寫函式。

virtual void keypressevent(qkeyevent *event)override;
.cpp檔案

#includevoid cwidget::keypressevent(qkeyevent *event)

}

2.使用qt函式介面setshortcut()新增,比如選單欄工具欄均可以通過新增addaction(),然後設定setshortcut快捷鍵。

qpushbutton *but = new qpushbutton(widget);

but->setshortcut(qkeysequence(qlatin1string("1")));

connect(but, &qpushbutton::clicked,

[=]()

);

以上的兩種方法比較常見,使用頻率也比較高,但是有時候並不能滿足我們。

重點:當前控制項沒有焦點時候怎麼辦?

這時候我們就需要通過其他方式了,先說簡單的。

使用qt的事件性質,對事件進行監聽,或者重寫最初的事件函式,攔截事件處理。

class myobject :public qobject

} return qobject::eventfilter(obj, event);

}};int main(int argc, char *ar**)

通過上面這種方法可以控制所有的qt事件,然後做處理。 }}

將獲取到的事件通知到對應的快捷鍵要處理的函式中,這樣就實現了快捷鍵功能。

3.使用windows的鉤子。

標頭檔案:

#pragma once

#include class cmywnd : public qwidget

;

原始檔:

#include "cmywnd.h"

#includehhook key_keep = null;

#define key_board_keyup 0x80000000

cmywnd *pmywnd;

lresult callback keyboardproc(int code, wparam wparam, lparam lparam)

return callnexthookex(0, code, wparam, lparam);

}cmywnd::cmywnd(qwidget *parent)

: qwidget(parent)

cmywnd::~cmywnd()

void cmywnd::registerkeyhook()

void cmywnd::unregisterkeyhook()

通過上面的方法也可以檢測到鍵盤事件,但是我在開發中遇到乙個問題,就是客戶端程序失去焦點後不能夠檢測到資訊,

注意:在使用鉤子時候,應該盡快的處理訊息,時間太長,將導致鉤子失效,會不在檢測鍵盤事件,這個鉤子失效可能是作業系統為了安全期間,做的超時處理。

乙個qwidget獲得焦點的方式受 focuspolicy 控制

qt::tabfocus

通過tab鍵獲得焦點

qt::clickfocus

通過被單擊獲得焦點

qt::strongfocus

可通過上面兩種方式獲得焦點

qt::nofocus

不能通過上兩種方式獲得焦點(預設值),setfocus仍可使其獲得焦點

留下幾個問題,等下次補充。

1.能不能通過主框架程序檢測鍵盤的訊息,然後通知給子程序?

2.被主框架巢狀的子程序在獲取到焦點後,主框架程序會不會失去焦點?

3.在上面2的條件下,主程序還能不能夠檢測到鍵盤事件了呢?

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

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

QT 按鈕控制項設定快捷鍵

keypressevent需要注意的地方 用setshortcut設定快捷鍵 designer 上屬性裡面設定快捷鍵 qt按鈕主要有qtoolbutton 和 qpushbutton,它們很多時候都需要設定快捷鍵,這樣使用者操作起來就更為方便。設定快捷鍵的方式是有幾種的,下面總結了一下,專案中,使用...

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

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