小程序代码:https://github.com/markmark999/Hellow-World/tree/master/wintest

看了网上很多关于注册热键的帖子,自己动手写了一个。

一共三步:

1在构造函数中注册热键

2继承QAbstractNativeEventFilter类重写虚函数nativeEventFilter响应系统消息

3在析构函数中注销热键

先创建一个Mainwindow或Widget的Qt程序,然后在头文件的类上添加父类QAbstractNativeEventFilter,声明函数nativeEventFilter

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include<QAbstractNativeEventFilter>
#include <QMainWindow>
#include<windows.h>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow,public QAbstractNativeEventFilter
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();virtual bool nativeEventFilter(const QByteArray &eventType, void *msg, long *) Q_DECL_OVERRIDE;private:Ui::MainWindow *ui;ATOM atom;
};
#endif // MAINWINDOW_H

在构造函数中注册热键我这里热键辅键为alt,热键为F8.开启监听,GlobalAddAtom函数可能会报错,因为字符格式不同。在.pro文件里添加 DEFINES-= UNICODE 即可解决。

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);atom=GlobalAddAtom("a");BOOL a=RegisterHotKey((HWND)winId(),atom,MOD_ALT,VK_F8);if(a)qApp->installNativeEventFilter(this);
}
析构函数中别忘了注销
MainWindow::~MainWindow()
{delete ui;BOOL b=UnregisterHotKey((HWND)winId(),atom);GlobalDeleteAtom(atom);
}

定义响应函数接收windows系统消息,其实是个事件过滤器。

bool MainWindow::nativeEventFilter(const QByteArray &eventType, void *msg, long *)
{if(eventType=="windows_generic_MSG"){MSG *pmsg=reinterpret_cast<MSG*>(msg);if((WM_HOTKEY==pmsg->message)&&((UINT)LOWORD(pmsg->lParam)==MOD_ALT)&&((UINT)HIWORD(pmsg->lParam)==VK_F8)){if(this->isHidden())this->show();elsethis->hide();return true;}return false;}return false;
}

热键注册,事件过滤器这些细节有时间再补上。

演示视频(热键为alt+F8)

https://b23.tv/Nj400Z

下面是我参考的帖子链接:

https://blog.csdn.net/luoshabugui/article/details/82428500

https://blog.csdn.net/zhangjinqing1234/article/details/49903613

https://www.cnblogs.com/lvdongjie/p/3944204.html

http://blog.sina.com.cn/s/blog_825ad93f0102xywl.html

Qt注册热键打开窗口相关推荐

  1. ahk 热键打开窗口_AHK 通过鼠标关闭指定窗口

    #SingleInstance Force ;; File Name: Close_window_by_click.ahk ;; Author: https://www.cnblogs.com/cod ...

  2. linux下qt响应全局热键,Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)...

    Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对这些进行支持,我们就只能自己写代码,调用系统相关的API了. 注意,这个是W ...

  3. Python界面编程第八课:Pyside2 (Qt For Python)打开关于窗口

    先上代码: from PySide2.QtWidgets import QApplication, QWidget, QMessageBox, QPushButton import sys from ...

  4. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  5. 远程注入dll中注册热键

    函数原型如下 BOOL RegisterHotKey( HWND hWnd, // handle to window int id, // hot key identifier UINT fsModi ...

  6. Qt全局热键(windows篇)

    Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对这些进行支持,我们就只能自己写代码,调用系统相关的API了. 注意,这个是W ...

  7. JS Window.Open 打开窗口详解

    一.window.open()支持环境:JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二.基本的语法: window.open(pageURL,name, ...

  8. qaxwidget传递参数到html,记一次QT使用QAxWidget打开.html文件调用显示离线百度地图不能缩放,自定义图片不能显示解决方法...

    主要问题: 一开始用的是在线的,都没有什么问题,自定义图片均可以显示,可是后面试了一下离线百度地图,在qt中运行打开.html文件和在电脑上面直接双击打开此文件显示是有差别的,在qt生成的程序中,地图 ...

  9. qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

最新文章

  1. 影响和改变世界的50件发明专利,猜下中国有几个?
  2. JavaScript 设计模式基础(二)
  3. 操作系统复习之线程、对称多处理和微内核
  4. 弹性地基梁板法计算原理_地基下沉别慌张!沉着冷静用对地基加固法
  5. 第八十五期:一文彻底搞懂cookie和session
  6. 32通过tcp发送数组_【干货】TCP协议详解
  7. 《解析深度学习:语音识别实践》.pdf
  8. 如何使用 Python 开发加权平均集成
  9. 简记_关于刷三防漆的几点个人见解
  10. pandas计算环比与同比
  11. swiper的基本使用
  12. 802.11 wireless 详解
  13. 关于CMS的两个常用参数的解读
  14. JMETER解决测试结果乱码问题
  15. Go实现简单的TCP服务端客户端通信(有黏包)
  16. Qt游戏开发-深海危机
  17. 爬取彼岸网所有4K美图壁纸--Python脚本
  18. 基于深度学习的车辆检测系统(MATLAB代码,含GUI界面)
  19. jExcel 创建基于 Web 的电子表格应用
  20. kubernete连接报java.lang.NoSuchMethodError: okhttp3.OkHttpClient$Builder.readTimeout(Ljava/time/Duratio

热门文章

  1. 一般人为什么不成功?(陈安之)--转载
  2. 计算机硬件技术基础 ---第一章
  3. PHP程序猿必知的24个库
  4. Google SEO基础知识,新手入门教学。
  5. com.baomidou.mybatisplus.autoconfigure.IdentifierGeneratorAutoConfiguration$InetUtilsAutoConfig.iden
  6. 吉林大学linux实验四
  7. 关于java中对双引号转义
  8. 计算机网络(学习笔记)
  9. 知识分享之Golang——使用gorm时进行执行自定义SQL的几种方式
  10. 电脑如何截屏?用什么快捷键?