首页 > 其他分享 >Qt nativeEvent 不触发/不执行/无效

Qt nativeEvent 不触发/不执行/无效

时间:2024-12-02 19:55:18浏览次数:2  
标签:触发 Qt QSpinBoxDemo nativeEvent eventType QSpinBox message

在做触摸屏项目的时候,各种控件都需要实现监听/触发点击事件,通常是通过信号/槽、事件过滤器(eventFilter)、重写mousePressEvent。

发现在QSpinBox中点击编辑框时不会触发任何鼠标相关点击事件。

 查资料发现通过重写nativeEvent函数可以拿到鼠标相关事件,不过有一个坑需要注意,需要显示调一下this->winId()  nativeEvent才能正常触发!

 

class Q_DECL_EXPORT QSpinBoxDemo : public QSpinBox
{
    Q_OBJECT
public:
    QSpinBoxDemo(QWidget *wid);

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

 

QSpinBoxDemo::QSpinBoxDemo(QWidget* wid):QSpinBox(wid) {

    setFocusPolicy(Qt::ClickFocus);
    this->winId();//必须,不然nativeEvent不触发

}


bool QSpinBoxDemo::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    Q_UNUSED(eventType);
    MSG *msg = static_cast<MSG *>(message);
    // qDebug() << msg->message;
    // 检测鼠标按下和松开事件
    if (msg->message == WM_LBUTTONDOWN) {
        qDebug() << "Mouse Button Pressed at: (" << msg->pt.x << ", " << msg->pt.y << ")";
    }
    if(msg->message == WM_LBUTTONUP) {
        this->clearFocus();//清除焦点,防止选中数字时不触发事件
    }

    return QSpinBox::nativeEvent(eventType, message, result);
}

感谢知乎中某个大佬的合理解释为什么必须调winId()后才会正常触发nativeEvent:

 

 

(99+ 封私信 / 80 条消息) 为什么 QT 的控件句柄只有用了 winId() 才能被捕捉到? - 知乎

 

标签:触发,Qt,QSpinBoxDemo,nativeEvent,eventType,QSpinBox,message
From: https://www.cnblogs.com/GengMingYan/p/18582516

相关文章

  • Qt常用图表: 折线图_柱形图_饼状图
    折线图#include"widget.h"#include"ui_widget.h"Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);this->setWindowTitle(QStringLiteral("我自定义的标题"));//调用此函数m......
  • QT C++ 解决调试运行时报 The inferior stopped 错误
    (1)报错信息和报错时调用堆栈SignaIReceived-QtCreatorTheinferiorstoppedbecauseitreceivedasignalfromtheoperatingsystem.Signalname:SIGSEGVSignalmeaning:Segmentationfault报错时调用堆栈停留在voidMyTableView::setModel()函数的该行:报错时调用堆栈......
  • JavaScript操作addEventListener监听触发事件
    JavaScript的addEventListener方法允许你为指定的HTML元素添加事件监听器。以下是一些常见的事件类型,可以使用addEventListener来监听它们:1,点击事件(click)点击事件(click):当用户点击元素时触发。element.addEventListener('click',function(){console.log......
  • Qt Design Studio入门3D项目设计
    一、QtDesignStudio3D设计的优势QtDesignStudio是一个专注于创建高性能用户界面(UI)的设计工具,它在设计3D界面方面具有一下显著优势:1、一体化工作流**1)设计与开发无缝集成:**设计师和开发者可以在同一环境中协作,无需反复转换文件格式或工具。**2)支持QtQuick和3D:*......
  • Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌
    一、前言首先泼一盆冷水,在不同的电脑上实现完完全全的帧同步理论上是不可能的,市面上所有号称帧同步的播放器,同一台电脑不同拼接视频可以通过合并成一张图片来绘制实现完完全全的帧同步,不同电脑,受限于网络的延迟,命令交互的时间占用,不同硬件之间的主频偏差等,肯定会有些许的误差,只要......
  • QT核心模块源码解析:组件与样式
    QT核心模块源码解析:组件与样式使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能......
  • 【3分钟学会】一招禁用表单中input输入框回车键自动触发提交事件!
    知其然知其所以然在前端项目开发中,偶尔会有表单提交的问题:用户输入表单后,不小心按了回车键,导致提前触发了提交事件?问题概述当表单中仅有一个input输入框时,按下回车键就会自动触发提交事件,这是为什么呢?这里就要提到一个标准:W3C文中最后一句话已经解释了原因:当表单中只有......
  • Qt Design Studio常用组件及其属性
    入坑QtDesignStudio        笔者此前一直使用的是Qtcreator与其内置的Qtdesigner进行客户端界面设计和开发,采用的是qwidget+c++的设计方法,由于项目需要进行3D设计,转而学习使用QtDesignStudio,发现qml代码简单,布局直观,对新手更为友好,开发上手快速。因此,后续也会在......
  • Qt for Android的配置方法及遇到的常见问题
    一、QtforAndroid的配置方法:安装正确版本的JavaJDK(经测试,qt6.7.3版本对应于JavaJDK17),并在环境变量中进行添加,Windows控制台使用命令java--version可验证环境变量是否添加成功并查看安装的Java版本。在Qtcreator中进行配置:2.1配置JDK位置后,点击设置SDK可以自动下......
  • D触发器
    一、D触发器原理D触发器(dataflip-flop)也称为维持-阻塞边沿D触发器,由六个与非门组成,其电路图及其逻辑符号如下图所示。其中G1和G2构成基本的RS触发器,G3和G4构成时钟控制电路,G5和G6组成数据输入电路。二、D触发器原理--钟控D触发器 在分析维持-阻塞边沿D触发器的工......