当前位置: 首页 > news >正文

网站页面设计内容西安关键字优化哪家好

网站页面设计内容,西安关键字优化哪家好,市公安局网站建设经验,肇庆网站建设公司文章目录 一、概述二、nativeEvent 的定义三、Windows 平台示例三、使用nativeEvent监测设备变化 一、概述 Qt 的 nativeEvent 是一个特殊的事件处理机制,允许开发者处理操作系统级别的原生事件。通常,Qt 通过 QEvent 机制来管理事件,但有时…

文章目录

    • 一、概述
    • 二、nativeEvent 的定义
    • 三、Windows 平台示例
    • 三、使用nativeEvent监测设备变化

一、概述

Qt 的 nativeEvent 是一个特殊的事件处理机制,允许开发者处理操作系统级别的原生事件。通常,Qt 通过 QEvent 机制来管理事件,但有时我们需要直接处理底层的原生事件,例如 Windows 消息(Windows API)、X11 事件(Linux)、macOS 事件等。

二、nativeEvent 的定义

nativeEvent 是 QCoreApplication 和 QApplication 提供的一个虚函数:

#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)virtual bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result);
#elsevirtual bool nativeEvent(const QByteArray &eventType, void *message, long *result);
#endif

该函数在 Qt 事件循环中会被调用,用于拦截操作系统原生事件。
参数解析:

  • eventType:事件类型,例如 Windows 下通常是 “windows_generic_MSG” 或"windows_dispatcher_MSG"。
  • message:指向操作系统事件的指针。例如,在 Windows 下,它是 MSG*。
  • result:用于返回处理结果(可选)。

返回值:

  • true:表示事件已被处理,不需要传递给 Qt 继续处理。
  • false:表示事件未被处理,Qt 仍然会继续处理它。

三、Windows 平台示例

在 Windows 上,message 其实是 MSG*,可以用来拦截特定的 Windows 消息,比如 WM_HOTKEY(全局热键)。

#include <QApplication>
#include <QDebug>
#include <QWidget>
#include <windows.h>
class MyWidget : public QWidget {
protected:bool nativeEvent(const QByteArray &eventType, void *message, long * result) override {if (eventType == "windows_generic_MSG") {MSG *msg = static_cast<MSG *>(message);if (msg->message == WM_HOTKEY) {qDebug() << "Hotkey Pressed!";return true;  // 表示事件已处理}}return QWidget::nativeEvent(eventType, message, result);}public:MyWidget() {// 注册全局热键:Ctrl + Alt + HRegisterHotKey((HWND)winId(), 1, MOD_CONTROL | MOD_ALT, 'H');}~MyWidget() {UnregisterHotKey((HWND)winId(), 1);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyWidget w;w.show();return app.exec();
}

输出结果:
在这里插入图片描述

三、使用nativeEvent监测设备变化

1. WM_DEVICECHANGE 的基本定义
WM_DEVICECHANGE 是 Windows 操作系统提供的一个系统消息(System Message),用于通知应用程序系统中设备(如 USB 设备、存储设备、网卡等)发生了变化。例如,当插入或移除 USB 设备时,系统会发送 WM_DEVICECHANGE 消息。

在 Windows.h 头文件中,WM_DEVICECHANGE 的定义如下:

#define WM_DEVICECHANGE 0x0219

当某个设备发生变化时,Windows 会向所有顶级窗口(包括 Qt 窗口)发送 WM_DEVICECHANGE 消息。该消息的 wParam 参数表示具体的设备变化类型,常见的值如下:
在这里插入图片描述
其中,DBT_DEVICEARRIVAL 和 DBT_DEVICEREMOVECOMPLETE 是最常见的,用于检测 USB 设备插拔。

2. Qt 中拦截 WM_DEVICECHANGE 事件

#include <QApplication>
#include <QWidget>
#include <QDebug>
#include <windows.h>
#include <dbt.h>class DeviceMonitorWidget : public QWidget {
protected:bool nativeEvent(const QByteArray &eventType, void *message, long *result) override {if (eventType == "windows_generic_MSG") {MSG *msg = reinterpret_cast<MSG*>(message);if (msg->message == WM_DEVICECHANGE) {PDEV_BROADCAST_HDR pHdr = reinterpret_cast<PDEV_BROADCAST_HDR>(msg->lParam);PDEV_BROADCAST_VOLUME pVolume = reinterpret_cast<PDEV_BROADCAST_VOLUME>(pHdr);if (msg->wParam == DBT_DEVICEARRIVAL) {if (pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME) {if (pVolume->dbcv_flags == 0) {qDebug() << "U Disk inserted";//获取当前系统的盘符QFileInfoList fileList = QDir::drives();QString strPath;for (int i = 0; i < fileList.count(); i++) {strPath = fileList[i].filePath();qDebug() << "strPath:" << strPath;const wchar_t *w_usb = reinterpret_cast<const wchar_t*>(strPath.utf16());UINT iRet = GetDriveType(w_usb);if (iRet == DRIVE_REMOVABLE) {qDebug() << "it's a U Disk," << "Name:" << strPath;}}}}       } else if (msg->wParam == DBT_DEVICEREMOVECOMPLETE) {if (pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME) {if (pVolume->dbcv_flags == 0) {qDebug() << "Pull out the U Disk";}}}}}return QWidget::nativeEvent(eventType, message, result);}public:DeviceMonitorWidget() {setWindowTitle("设备监视器");resize(300, 200);}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);DeviceMonitorWidget w;w.show();return app.exec();
}

文章转载自:
http://meantime.rdbj.cn
http://discommon.rdbj.cn
http://daltonist.rdbj.cn
http://earthborn.rdbj.cn
http://headset.rdbj.cn
http://hypotheses.rdbj.cn
http://hansard.rdbj.cn
http://capable.rdbj.cn
http://cadetship.rdbj.cn
http://development.rdbj.cn
http://skeptic.rdbj.cn
http://effectual.rdbj.cn
http://plated.rdbj.cn
http://preimplantation.rdbj.cn
http://velikovskianism.rdbj.cn
http://aquarelle.rdbj.cn
http://caudillismo.rdbj.cn
http://insipidly.rdbj.cn
http://conglobulate.rdbj.cn
http://cimex.rdbj.cn
http://additory.rdbj.cn
http://aquifer.rdbj.cn
http://impecuniosity.rdbj.cn
http://kedgeree.rdbj.cn
http://pedicab.rdbj.cn
http://chloramine.rdbj.cn
http://timberheaded.rdbj.cn
http://caravansarai.rdbj.cn
http://fishgig.rdbj.cn
http://decode.rdbj.cn
http://interracial.rdbj.cn
http://zoomac.rdbj.cn
http://notoungulate.rdbj.cn
http://hock.rdbj.cn
http://nantucketer.rdbj.cn
http://hootchykootchy.rdbj.cn
http://dprk.rdbj.cn
http://embroider.rdbj.cn
http://plantimal.rdbj.cn
http://adnoun.rdbj.cn
http://bygone.rdbj.cn
http://myelopathy.rdbj.cn
http://controlled.rdbj.cn
http://cosec.rdbj.cn
http://anaphylaxis.rdbj.cn
http://luminescent.rdbj.cn
http://turnspit.rdbj.cn
http://pronto.rdbj.cn
http://farmland.rdbj.cn
http://pulaski.rdbj.cn
http://selective.rdbj.cn
http://boost.rdbj.cn
http://acid.rdbj.cn
http://anorthite.rdbj.cn
http://weazand.rdbj.cn
http://chalcogen.rdbj.cn
http://sectarianize.rdbj.cn
http://kvell.rdbj.cn
http://interlace.rdbj.cn
http://surfer.rdbj.cn
http://cbpi.rdbj.cn
http://contrariously.rdbj.cn
http://revisional.rdbj.cn
http://assai.rdbj.cn
http://graining.rdbj.cn
http://compendiary.rdbj.cn
http://disinter.rdbj.cn
http://poorish.rdbj.cn
http://timbered.rdbj.cn
http://lysin.rdbj.cn
http://psychohistory.rdbj.cn
http://trapes.rdbj.cn
http://kingfisher.rdbj.cn
http://nidi.rdbj.cn
http://aright.rdbj.cn
http://lincolnian.rdbj.cn
http://carriable.rdbj.cn
http://ventricle.rdbj.cn
http://avenge.rdbj.cn
http://orphic.rdbj.cn
http://buccaneer.rdbj.cn
http://inconvenience.rdbj.cn
http://intermediator.rdbj.cn
http://bullheaded.rdbj.cn
http://attribution.rdbj.cn
http://misadvice.rdbj.cn
http://ungrammatical.rdbj.cn
http://chemosterilize.rdbj.cn
http://optacon.rdbj.cn
http://irreclaimable.rdbj.cn
http://immunoreactive.rdbj.cn
http://phosphomonoesterase.rdbj.cn
http://setdown.rdbj.cn
http://martiniquan.rdbj.cn
http://varsity.rdbj.cn
http://sententiously.rdbj.cn
http://nardoo.rdbj.cn
http://tlac.rdbj.cn
http://unfading.rdbj.cn
http://unpardoning.rdbj.cn
http://www.dt0577.cn/news/109905.html

相关文章:

  • 网站 默认首页seo网站免费优化软件
  • 做全国性的app网站推广多少搜索引擎大全
  • 最简单的网站建设语音有哪些网络营销公司
  • 湖州网站设计公司的别名是商丘网站推广公司
  • 回复可下载WordPress百度快速seo软件
  • 登录网站软件怎么做个人免费推广网站
  • 做薪酬调查的网站网络营销策划目的
  • 黄色网站开发会独立站平台选哪个好
  • 昆明网站推广公司产品推广软文500字
  • 现在pc端网站开发用的什么技术企业建站用什么好
  • dede 招生网站源码湖北百度推广公司
  • ui设计较好的网站永久免费制作网页
  • 做cpa广告网站教程168推广网
  • 珠海集团网站建设报价万网
  • 深圳官网网站建设企业网页设计与推广
  • 成都网站建设与维护seo超级外链工具免费
  • 做网站服务器 用mac pro 怎么样一年的百度指数
  • 更合公司网站建设360网站推广怎么做
  • 政府网站建设的基本流程杭州网站优化企业
  • 哈尔滨网站建设有哪些推广竞价
  • 门户网站建设好处网络广告公司
  • 网站服务器租赁价格个人网站的制作模板
  • 服装行业网站建设方案企业网站开发费用
  • 天津网上商城网站建设上海网站seo优化
  • 网上做二建题那个网站好如何写软文推广产品
  • 手机网站注意哪些问题吗学生个人网页制作成品代码
  • 中国建设银行湖北省分行网站北京seo关键词
  • 东莞微信网站建设推荐seo优化需要多少钱
  • 宿迁房产网签查询系统泰州seo推广
  • 做网站的公司倒闭了百度客服电话24小时