Qt44 发送自定义事件(二)

QTablewidget双击单元格和关闭编辑框分别发出信号 继承QTablewidget,重写mouseDoubleClickEvent。最新开发中,在单元格双击进入编辑态时发出信号,在编辑完成时,再次发出信号。 阅读详情

学习自唐佐林老师的Qt


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

QWidget类并没有提供鼠标双击相关的信号,所以没办法将鼠标双击信号映射到槽。此时我们又想捕捉这个鼠标双击信息,那就只能 重写 QWidget类的event()事件处理函数

实验:自定义事件类 + 处理自定义事件类对象

StringEvent.h

#ifndef _STRINGEVENT_H_
#define _STRINGEVENT_H_
#include <QEvent>
#include <QString>

//自定义事件类 ,继承自 QEvent
class StringEvent : public QEvent
{
    QString m_data;
public:
    //创建事件类全局唯一 TYPE值
    const static Type TYPE = static_cast<Type>(QEvent::User + 0xFF);
    explicit StringEvent(QString data = "");
    QString data();
    
};
#endif // _STRINGEVENT_H_

Widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
#include <QLineEdit>
class Widget : public QWidget
{
    Q_OBJECT
    
    QLineEdit m_edit;
public:
    Widget(QWidget *parent = 0);
    bool event(QEvent* evt);//重写 event()事件处理函数
    bool eventFilter(QObject* obj, QEvent* evt);//事件过滤器
    ~Widget();
};
#endif // WIDGET_H

StringEvent.cpp

#include "StringEvent.h"
StringEvent::StringEvent(QString data) : QEvent(TYPE)
{
    m_data = data;
}
QString StringEvent::data()
{
    return m_data;
}

Widget.cpp

#include "Widget.h"
#include "StringEvent.h"
#include <QMouseEvent>
#include <QDebug>
#include <QApplication>
Widget::Widget(QWidget *parent)
    : QWidget(parent), m_edit(this)//初始化列表 指定父组件
{
    //安装事件过滤器 将Widget对象作为 QLineEdit 对象的事件处理器,安装事件处理器
    m_edit.installEventFilter(this);
}
//重写 event()事件处理函数
/*
  QWidget类并没有提供鼠标双击相关的信号,所以没办法将鼠标双击信号映射到槽。此时我们又想捕捉这个鼠标双击信息,那就只能
    重写 QWidget类的event()事件处理函数
*/
bool Widget::event(QEvent* evt)
{
    //捕获鼠标双击事件
    if( evt->type() == QMouseEvent::MouseButtonDblClick )
    {
        qDebug() << "event: Before sentEvent";
        //创建自定义事件类 对象,即自定义类事件
        StringEvent e("D.T.Software");
        //给QLineEdit对象发送一个自定义类事件e,阻塞式
        QApplication::sendEvent(&m_edit, &e);
        qDebug() << "event: After sentEvent";
    }
    return QWidget::event(evt);
}
//处理自定义事件类对象,事件过滤器
bool Widget::eventFilter(QObject* obj, QEvent* evt)
{
    //判断收到事件的 事件对象 和 事件类型,并处理
    if( (obj == &m_edit) && (evt->type() == StringEvent::TYPE) )
    {
        //父类强制类型转换到子类
        StringEvent* se = dynamic_cast<StringEvent*>(evt);
        qDebug() << "Receive: " << se->data();
        m_edit.insert(se->data());//将数据插入到文本框中
        return true;//代表当前事件已经被处理,不会再传递到目标对象QLineEdit对象上面去
    }
    //如果收到事件的 事件对象 和 事件类型不是我们期望的,则直接调用父类事件过滤器
    return QWidget::eventFilter(obj, evt);
}
Widget::~Widget()
{
    
}

main.cpp

#include <QtGui/QApplication>
#include "Widget.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    
    return a.exec();
}

在这里插入图片描述

Qt跨线程发送信号与元数据 Qt的signals/slots是可以用在线程间的。由于事件循环(event loop)是在主线程完成的,所以在非主线程发送一个信号时,对应的槽函数将会由主线程执行。 熟悉多线程的读者应该都感受到这里会有一个微妙的问题。如果signals/slots的函数参数是一个自己定义的类型。比如自己定义了一个Student类,信号函数为sendStudent(const Student &stu) 阅读详情

相关推荐

Keil5安装多版本共存方案:实用技巧分享

分享Keil5安装过程中实现多版本共存的实用方法,解决开发环境冲突问题。通过合理配置路径与版本管理,让keil5安装更高效稳定,提升嵌入式开发体验。

weixin_42514750的博客 1531

Qt 使用QLabel的派生类实现QLabel的双击响应

在QLabel中没有双击等事件响应,需要构建其派生类,自定义信号(signals)、重载事件函数(event),最后在Qwidget中使用connect链接即可,进而实现响应功能。对于其余没有需求事件响应的QObject同样适用。信号doubleClicked、 与mouseDoubleClickEvent与mouseDoubleClickEvent信号doubleClicked在Qt中有内置定义,不需要重载。

lucust的博客 3057

知识见闻 - Salesforce公司发展史

不过,通过将自己开发的产品与公司收购的其它云产品进行结合,Salesforce可以为用户提供更多的产品种类,Salesforce可以继续强化自己的平台和产品套件属性,这一平台和套件的发展规模已经远远超出了一个单一的CRM的规模。他们围绕一个相对简单的产品向用户兜售云的概念,然后,他们开始开发其它产品,并寻找培育一个不断增长的生态系统的方法,最理想的情况是能驱动Salesforce的营收增长。现在,Salesforce通过打造更多的用例并改进自己产品的方式来直接应对竞争对手的竞争,从而捍卫自己现在的地位。

guoqx的专栏 1453

Qt 实现QLabel的单击双击功能(二)

这次解决问题1和3. 问题1:双击时必执行一次单击操作 问题3:鼠标点击按住不放也执行了一次单击操作 问题3很简单是因为我使用了mousePressEvent()事件,鼠标按下时就发送了单击信号,要想解决必须引入mouseReleaseEvent()鼠标抬起事件。 这里在mouseReleaseEvent()中发送单机信号。 void QXHLabel::mousePressEvent(QMouseEvent *event) { } void QXHLabel::mouseReleaseEvent(QMou

007的博客 1684

HRnet的pytorch实现

HRnet的pytorch实现

奋土的博客 1953

从零开始:如何用STM32和MAX30100打造你的第一台智能心率监测设备

本文详细介绍了如何使用STM32微控制器和MAX30100传感器从零开始构建智能心率监测设备。涵盖硬件选择、电路设计、软件开发到心率算法实现的全过程,特别适合嵌入式开发新手和创客。通过OLED显示和蓝牙串口传输数据,打造低成本、高精度的心率检测仪,为健康监测项目提供实用解决方案。

7z8x2c4v6b9的博客 192

Qt实现双击可编辑的QLabel,输入文本后回车确定

功能 环境:VS2013 + Qt5.8 在一个QLabel标签上,双击,对文本进行编辑,按下回车或者Esc,退出编辑状态,或者任意点击其他地方,退出Focus,退出编辑状态 代码实现 思路:通过stackedWidget,安装installFilter(),进行事件判断。 myLabelEdit::myLabelEdit(QWidget *parent) : QMainWindow(pare...

听风雨 8352

基于3D相机的人体穴位识别与标注系统——完整Python实现方案

摘要 本文提出了一种基于3D相机的人体穴位识别与标注系统完整实现方案。系统采用Intel RealSense D435相机实时采集RGB-D数据,结合MediaPipe Pose模型进行人体33个关键骨骼点的三维姿态估计。通过建立穴位与骨骼关键点的映射关系,利用相机内参和深度信息将二维图像坐标转换为三维空间坐标。系统采用模块化设计,包含数据采集层、算法处理层、坐标转换层和可视化层,实现了穴位定位、三维坐标转换和点云可视化功能。关键技术包括:基于骨度折量法的穴位映射算法、深度图像到三维点云的转换方法,以及Op

AI的内部世界的博客 273

Python pyqt listwidget 单元格单击信号、双击信号以及其他功能整理

近期工作过程中的经验总结。

weixin_41657202的博客 1751

innovus:addRepeaterByRule用法

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?addRepeaterByRule不管transition/timing violation,只根据约束的length/cap/fanout等等去给net 插buffer。

m0_61544122的博客 1092

STM32芯片解锁读写保护:更改Option Byte [Error已解决]

解锁读保护:STLink更改Option Byte 变Level从1变为0,点击Apply即可。(程序执行读保护,其实是将Level从0变为1) 默认情况下该保护功能是不开启的,若要开启该功能,需要改写内部FLASH选项字节(Option Bytes)中的配置。 RDP读保护级别 级别0,无保护, 级别1,使能读保护, 这种保护下,若使用调试功能(使用下载器、仿真器)或者从内部SRAM自举时都不能对内部FLASH及备份SRAM作任何访问(读写、擦除都被禁止); 当芯片处于级别1的时候,可以把选项字节

HowieXue 薛永浩的博客 2万+

第44课 发送自定义事件(下)

1、自定义事件对象    1.1、 Qt可以自定义新的事件类        1.1.1、 自定义的事件类必须继承自QEvent        1.1.2、 自定义的事件类必须拥有全局唯一的Type值(event-&gt;type()可以获得事件的类型)        1.1.3、 程序中必须提供处理自定义事件的方法    1.2、 自定义事件类        1.2.1、 将QEvent作为父类继...

中年人 207

使用Simulink对氢燃料电池与锂电池的混合储能系统进行建模

本文介绍了基于Simulink的氢燃料电池与锂电池混合储能系统建模与协同控制方法。系统通过氢燃料电池提供稳定能源,锂电池实现快速响应,结合DC-DC变换器和负载管理器实现动态调控。详细阐述了从模型创建、关键模块配置到控制器设计的完整流程,重点说明了功率分配算法和充放电控制策略的实现。通过仿真分析验证了系统在不同负载条件下的性能表现,包括响应速度、工作效率和稳定性等指标。该方案为新能源混合储能系统的设计与优化提供了实用指导,有助于提升系统可靠性和延长电池寿命。

amy_mhd的博客 314

Qt自定义Label控件

Qt自定义Label控件方法一方法二 方法一 在Demo编写期间需要对头像显示控件进行特殊处理,使其显示为圆形并且能够响应鼠标点击事件,就类似于PC端QQ点击头像。因此就需要通过继承QLabel类并重写其paintEvent和event函数来实现控件自定义。 MaskLabel.h 1. #ifndef MASKLABEL_H 2. #define MASKLABEL_H 3. 4. #include <QLabel> 5. #include <QPainter>

菜鸟不会飞 2525

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

[QT编程系列-44]: Windows + QT软件闪退的检测方法

Windows事件查看器(Event Viewer)是Windows操作系统中的一个内置工具,用于查看和分析系统和应用程序生成的事件日志。它记录了系统的各种事件和错误,以帮助诊断和解决问题。应用程序日志:记录了应用程序和服务生成的事件,如应用程序错误、警告和其他相关信息。安全日志:记录了与Windows安全相关的事件,如用户登录、访问权限、安全策略等。系统日志:记录了与操作系统本身相关的事件,如系统错误、驱动程序问题和其他系统级事件。

文火冰糖(王文兵)的博客 5519

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Qt事件处理

Qt事件处理 Qt事件处理的五个层次 Qt 应用程序 事件处理 的五个层次,同时也是时间流程如下图所示: 说明如下: sendEvent()会把event直接发送给QCoreApplication的notify(),postEvent()把event追加到事件队列中最终也要调用notify()。 notify()把事件分发给参数中的receiver,如果receiver安装了ev...

weixin_30484739的博客 110

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Qt事件研究

http://hi.baidu.com/ueszx/blog/item/fdb9d44a68b7972709f7efd0.html QEvent QEvent类是所有事件类的基类。事件对象包含事件参数。Qt的主事件循环(QApplication::exec())从事件队列取得本地窗口系统的事件,并将它们转变成QEvent,然后装转换好的事件发送给QObjects。一般情况下,事件来

flyingpig204的专栏 1422

Qt事件机制的小实验

转载:http://blog.youkuaiyun.com/unclerunning/article/details/70229414 Qt事件机制的小实验 Qt事件机制的小实验 实验一QCoreApplicationsendEvent实验二QCoreApplicationpostEvent 实验一:QCoreApplication::sendEve

yingge的专栏 439

QT学习笔记

/#include //qlabel 版本不一样//Widget w;w.show();/**//*label也可以是窗体QLabel l;l.show();*/

qq_35429166的博客 1698

Qt 每日面试题 -5

Qt 每日面试题 -5

m0_56741902的博客 1313

Qt中槽的使用

Qt中槽的使用

m0_60259116的博客 259

qt 调用linux键盘输入,嵌入式linux上QT标准键盘输入的实现

1、嵌入式linux上QT标准键盘输入的实现在嵌入式平台上运行QTE时,使用的键盘通常不是标准键盘,而是嵌入式设备外扩的普通按键。那么实现QTE键盘输入的方法大体上可以分为两类:(1)编写一个普通按键驱动,然后开辟一个QT线程读取按键值,在通过信号把按键值发送出去。需要接收键盘输入的目标,声明槽函数,接收键盘信号。(2)将按键驱动编写成标准键盘驱动,让QTE感觉和标准键盘在打交道。上述两种方法给有...

weixin_29066781的博客 1492

qt通过tcp与java通信_QT之TCP通信

QT中可以通过TCP协议让服务器和客户端之间行通信。所以下面我就围绕服务器和客户端来写。这是我们写服务器和客户端的具体流程:A、服务器:1.创建QTcpServer对象2.启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号)3.当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket)4.QTc...

weixin_35797901的博客 730

Qt QThread与QObject的关系

Qt QThread与QObject的关系

m0_73443478的博客 780

第0-0课 - QT实验分析教程引言

QT实验分析教程目录: 第0课 - 开发环境搭建 第1课 - GUI 程序原理分析 第2课 - GUI 程序实例分析 第3课 - QT 的诞生和本质 第4课 - Hello QT 第5课 - Qt Creator工程介绍 第6课 - 窗口部件及窗口类型 第7课 - Qt 中的坐标系统 第8课 - 启航!第一个应用实例 第9课 - 计算器界面代码重构 第10课 - 初探 Qt 中的消息处理 第11...

梦心之魂的博客 96
上一篇: Qt43 发送自定义事件(一)
下一篇: Qt45 写一个可复用的查找对话框界面
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值