1、事件ID

本质上就是一个整型值。0-999作为系统保留字段,自定义事件从QEvent::User(也就是1000)开始,

例如:

#define MY_EVENT QEvent::User+100

大部分情况下自定义事件是不会冲突的,如果我们还引入了其他库,也不完全能确保如此,最好的方式就是通过系统事件获取事件ID。

static int QEvent::registerEventType ( int hint = -1 );

注册并返回一个用户自定义事件,如果hint对应的事件可用,则直接返回hint作为事件ID,否则,返回一个可用的事件ID;

2、事件数据

我们可以通过从QEVENT派生,自定义事件所关联的数据;

class QMyEvent : public QEVENT

3、事件发送

两种方式:

1、同步发送static bool QCoreApplication::sendEvent(QObjecy * receiver, QEvent * event):

QMyEvent event;
          QApplication::sendEvent(receiver, &event );

同步发送的事件是立即发送给receiver对象执行,返回值也就是事件处理后的返回值,所以event可以是栈变量;

2、异步发送static bool QCoreApplication::postEvent(QObject * receiver, QEvent * event):

QMyEvent* event = new QMyEvent();
         QApplication::postEvent(receiver, event );

异步事件是向receiver对象的事件队列投递事件(添加到末尾),投递后立即返回;

4、事件处理

1、重载event函数

void QObject::event(QEvent* event)

2、重载CustomEvent;

void QObject::customEvent(QEvent* event)

3、通过EventFilter处理;

自定义QT事件的更多相关文章

  1. PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围

    除了<PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料速查>介绍的Qt已经定义的事件外,Qt还支持自定义事件. 为了方便起见,可以使用 registerEventTyp ...

  2. PyQt学习随笔:Qt事件类QEvent详解

    QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...

  3. QT事件

    qtevents多线程工作object存储 Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不错的文章,是2004年季刊的一篇文章,网上有这篇文 ...

  4. 自定义Qt按钮

    转自:http://blog.csdn.net/starcloud_zxt/article/details/5185556 Qt自带的PushButton样式比较单一,在开发的时候往往按钮的形状各异, ...

  5. Qt 事件机制

    [1]事件 事件是可以被控件识别的操作.如按下确定按钮.选择某个单选按钮或复选框. 每种控件有自己可识别的事件,如窗体的加载.单击.双击等事件,编辑框(文本框)的文本改变事件等等. 事件就是用户对窗口 ...

  6. 【转】QT事件传递与事件过滤器

        [概览] 1.重载特定事件函数.    比如: mousePressEvent(),keyPressEvent(),  paintEvent() .     2.重新实现QObject::ev ...

  7. [GUI] QT事件与X11的关系

    做了一段时间linux下与QT事件相关的工作,经常会遇到X11,总是苦于无法完全理解其与linux以及QT事件之间的关系,所以用两篇文章来简单总结下linux中的图形管理和QT事件与X11的关系. & ...

  8. 自定义QT窗口部件外观之QStyle

    自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感:二是使用Qt样式表. Q ...

  9. qt事件机制(转)

    学习了一段时间的Qt之后,发现Qt的事件机制和其他语言的机制有些不同.Qt除了能够通过信号和槽机制来实现一些Action动作之外,还可以用对象所带的事件,或者用户自定义的事件来实现对象的一些行为处理. ...

随机推荐

  1. Windows 内核(WRK)编译

    引子 WRK 是微软于 2006 年针对教育和学术界开放的 Windows 内核的部分源码, WRK(Windows Research Kernel)也就是 Windows 研究内核, 在 WRK 中 ...

  2. Document字段发生变化后,报的错

    2016-10-11 15:27:47,828 [ERROR] [main] SpringApplication:838 - Application startup failedorg.springf ...

  3. CreateObject("Wscript.Shell")用法

    WScript.Shell是WshShell对象的ProgID,创建WshShell对象可以运行程序.操作注册表.创建快捷方式.访问系统文件夹.管理环境变量. 该对象有一个run方法. Run 方法创 ...

  4. php Magic methods __call

    <?php class Car{ protected $_color; protected $_model; public function __call($name,$arguments){ ...

  5. perl 正则匹配多个

    Vsftp:/root# cat k1.pl my $_='upDaTe'; if( $_ =~ /^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK| ...

  6. 【HDOJ】3957 Street Fighter

    一定要注意审题啊,题目说的是选出做少的英雄打败其余处在任何模式下的英雄.共有Sigma(num of model)个方案,每个方案有Sigma(num of model)+n个决策.挺不错的一道精确覆 ...

  7. 【原创】MIPS·Verilog·FPGA

    时至今日,终于将全部的计划55条MIPS指令在FPGA上全部验证完毕,通过这近一个月的不断的修改调试.修改调试,我对整个流程对MIPS有了深刻的体会和认识.借着刚刚现阶段任务的兴奋和短暂的空闲时间,将 ...

  8. FRM-40401 No changes to save error

    FAQ: I have updated a table from the form and written a update statement in the when-button-pressed ...

  9. Oracle系列之包

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 建包 -- 建立包头 create package mypkg is procedure set_ctx(p_name in varc ...

  10. 用if else 判断是不是7的倍数等

    static void Main(string[] args)        {            while (true)            {                int b; ...