最近qt專案中遇到乙個這樣的問題:主介面有暫停和停止兩個功能按鈕,
但是程式在執行過程中滑鼠是被程式控制的,所以想到設定快捷鍵來
實現暫停和停止,但是qt設定的按鈕快捷鍵是需要按鈕有獲得焦點的,而
在程式執行中,無法獲得焦點。
解決方案:呼叫windows自帶的api來實現快捷鍵。
1.註冊全域性熱鍵
// 註冊全域性熱鍵
registerhotkey(hwnd(this->winid()), globaladdatoma("htk_run"), mod_control, vk_f7); // ctrl+f7
registerhotkey(hwnd(this->winid()), globaladdatoma("htk_end"), mod_control, vk_f8); // ctrl+f8
2.析構函式中 銷毀全域性熱鍵,防止程式退出後熱鍵仍然被占用
autotestui::~autotestui()
3.重寫熱鍵捕獲事件
protected:
virtual bool nativeevent(const qbytearray& eventtype, void* message, long* result);
bool autotestui::nativeevent(const qbytearray& eventtype, void* message, long* result)
else if (pmsg->wparam == globaladdatoma("htk_end"))}}
return qwidget::nativeevent(eventtype, message, result);
}
C 全域性熱鍵設定 與 窗體熱鍵設定
1 窗體熱鍵 首先要設定主窗體keypreview為true,可直接在屬性中進行設定,或者在窗體載入中設定 this.keypreview true 然後新增窗體keydown事件,如下 private void frmmain keydown object sender,keyeventargs ...
C 全域性熱鍵設定與窗體熱鍵設定例項
1 窗體熱鍵 首先要設定主窗體keypreview為true,可直接在屬性中進行設定,或者在窗體載入中設定 this.keypreview true 然後新增窗體keydown事件,如下 複製 如下 private void frmmain keydown object sender,keyeven...
C 程式熱鍵設定
採用api的方式來實現。首先定義這些熱鍵註冊的api,如下 dllimport user32 public static extern bool registerhotkey intptr hwnd,int id,uint control,keys vk 註冊熱鍵的api dllimport use...