qt 注册热键

Posted ajanuw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt 注册热键相关的知识,希望对你有一定的参考价值。

  1. 将所需的库添加到您的qmake项目(.PRO文件)
LIBS +=     -lUser32

2.在代码中包含所需的头文件。

#include <windows.h>
  1. 在程序开始时注册热键
// 热键id
#define HOT_KEY_ALT_CTRL_M 0
#define HOT_KEY_CTRL_A 1

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // ALT + CTRL + M
    if (!RegisterHotKey(HWND(winId()), HOT_KEY_ALT_CTRL_M, MOD_ALT | MOD_CONTROL, 0x4D))
    {
        qDebug() << "注册热键 ALT + CTRL + M ok.";
    }

    // CTRL + A
    if (!RegisterHotKey(HWND(winId()), HOT_KEY_CTRL_A, MOD_CONTROL, 0x41))
    {
        qDebug() << "注册热键  CTRL + A ok.";
    }
}
  1. 重写MainWindow应用程序中的nativeEvent函数

先申明

bool nativeEvent(const QByteArray &eventType, void *message, long *result);

在实现

bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    Q_UNUSED(eventType);
    Q_UNUSED(result);
    MSG* msg = static_cast<MSG*>(message);
    if (msg->message == WM_HOTKEY)
    {
        switch (msg->wParam) {
        case HOT_KEY_ALT_CTRL_M:
            qDebug() << "触发了: ALT + CTRL + M";
            break;
        case HOT_KEY_CTRL_A:
            qDebug() << "触发了: CTRL + A";
            break;
        default:
            qDebug() << "被注入了其他热键.";
        }
        return true;
    }
    return false;
}

ok...

以上是关于qt 注册热键的主要内容,如果未能解决你的问题,请参考以下文章

为啥按下热键组合时没有触发我的注册热键

MFC-注册热键

在 .NET 中注册热键 - 三/四键组合

注册 3 个热键?可能的?

RegisterHotKey注册热键,然后响应WM_HOTKEY消息

python qt在后台等待热键