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

网站建设建议药类网站整站模板下载

网站建设建议,药类网站整站模板下载,锦州微商网站制做,类似于淘宝的网站建设QT之事件系统1. 概述2. 事件的传递3. 事件类型4. 事件处理与事件过滤5. 自定义事件5.1 Demo6. 发送事件7. 参考1. 概述 在QT中#xff0c;事件均派生自QEvent抽象类#xff0c;事件可以由任何派生自QObject的子类实例接收和处理。它们与widget关联性极强。 2. 事件的传递 … QT之事件系统1. 概述2. 事件的传递3. 事件类型4. 事件处理与事件过滤5. 自定义事件5.1 Demo6. 发送事件7. 参考1. 概述 在QT中事件均派生自QEvent抽象类事件可以由任何派生自QObject的子类实例接收和处理。它们与widget关联性极强。 2. 事件的传递 当事件发生时QT 通过构造适当的 QEvent 子类实例来创建一个事件对象来表示它并通过调用其 event() 函数将其传递给 QObject 的特定实例 event() 函数本身不处理事件它根据传递的事件类型它会调用该特定类型事件的事件处理程序并根据事件是被接受还是被忽略来发送响应。 传递的顺序如下 3. 事件类型 大多数事件类型都有特殊的类特别是 QResizeEvent、QPaintEvent、QMouseEvent、QKeyEvent 和 QCloseEvent。 每个类都是 QEvent 的子类并添加特定于事件的函数。 例如QResizeEvent 添加了 size() 和 oldSize() 以使小部件能够发现它们的尺寸是如何改变的。 每个事件都有一个关联的类型在 QEvent::Type 中定义这可以用作运行时类型信息的方便来源以快速确定给定事件对象是从哪个子类构造的。 具体的事件类型可参考官网介绍 4. 事件处理与事件过滤 常用的事件处理方式如下 重写各种事件的虚函数 如paintEvent()、mousePressEvent()等。这是最常见的方式同时也是最简单和功能最弱的方式重写event()函数 event()函数是所有对象的事件入口QObject和QWidget中的实现默认是把事件传递给特定的事件处理函数在特定对象上面安装事件过滤器 该过滤器仅过滤该对象接收到的事件。在QCoreApplication::instance()上面安装事件过滤器 该过滤器将过滤所有对象的所有事件因此和notify()函数一样强大但是它更灵活因为可以安装多个过滤器。全局的事件过滤器可以看到 disabled 组件上面发出的鼠标事件。全局过滤器有一个问题只能用在主线程。重写QCoreApplication::notify()函数 这是最强大的和全局事件过滤器一样提供完全控制并且不受线程的限制。但是全局范围内只能有一个被使用因为QCoreApplication是单例的 Qt 调用 QApplication 来发送一个事件重新实现 notify()函数是在事件过滤器得到所有事件之前获得它们的唯一方法。事件过滤器使用更为便利。因为可以同时有多个事件过滤器。而 notify()函数只有一个。 5. 自定义事件 QT自定义事件的创建步骤如下 继承QEvent类定义一个事件类型的两种方式 QT中有两个宏用来定义了用户事件的最大边界(QEvent::MaxUser)和最小边界(QEvent::User)向QT事件系统注册自定义事件类型 在上述步骤中可以创建出一个与系统事件类型不冲突的自定义事件类型但是无法保证自定义事件类型不冲突。因此需要将自定义事件类型注册到QT事件系统中这样若有相同的类型再次被注册时QT事件系统就可以处理自定义事件类型冲突的问题。注册函数如下// 线程安全 // registerEventType 若传入参数可用则返回此参数否则返回QEvent::MaxUser和QEvent::User之间的值若参数不在QEvent::MaxUser和QEvent::User之间则忽略参数 static int QEvent::registerEventType ( int hint -1 );5.1 Demo myevent.h#ifndef MYEVENT_H #define MYEVENT_H#include QEventclass MyEvent : public QEvent { public:MyEvent();int getValue();static Type eventType; private:int m_value; };#endif // MYEVENT_H myevent.cpp#include myevent.hQEvent::Type MyEvent::eventType (QEvent::Type)QEvent::registerEventType(); MyEvent::MyEvent(): QEvent(eventType),m_value(1) { }int MyEvent::getValue() {return m_value; } mainwindow.h#ifndef MAINWINDOW_H #define MAINWINDOW_H#include QMainWindowQT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~MainWindow();virtual bool event(QEvent *event) override; protected:// 自定义事件的处理(专门处理自定义事件的)也可以用event()函数处理virtual void customEvent(QEvent *event) override; private:Ui::MainWindow *ui; }; #endif // MAINWINDOW_H mainwindow.cpp#include mainwindow.h #include ui_mainwindow.h #include myevent.h #include QDebugMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui-setupUi(this);MyEvent* myEvent new MyEvent;// 事件只能定义在堆上不用手动释放系统会自动释放qApp-postEvent(this,myEvent); }MainWindow::~MainWindow() {delete ui; }bool MainWindow::event(QEvent *event) {QEvent::Type eventType event-type();if(eventType MyEvent::eventType){MyEvent* myEvent dynamic_castMyEvent*(event);qDebug() event eventType ;qDebug() event myEvent-getValue() ;event-ignore();}// 处理完成后继续传播事件这样customEvent就会收到自定义事件return QObject::event(event); }void MainWindow::customEvent(QEvent *event) {QEvent::Type eventType event-type();if(eventType MyEvent::eventType){// 这里默认是trueqDebug() customEvent event-isAccepted();MyEvent* myEvent dynamic_castMyEvent*(event);qDebug() customEvent eventType ;qDebug() customEvent myEvent-getValue() ;//event-accept();} }event()处理事件的时机比customEvent()处理的早 6. 发送事件 sendEvent() sendEvent() 立即处理事件。 当它返回时事件过滤器和/或对象本身已经处理了该事件。 对于许多事件类有一个名为 isAccepted() 的函数可以告诉您事件是被调用的最后一个处理程序接受还是拒绝。postEvent() postEvent() 将事件发布到队列中以供稍后分派。 下次 Qt 的主事件循环运行时它会调度所有已发布的事件并进行一些优化。 例如如果有多个调整大小事件它们将被压缩为一个。 这同样适用于绘制事件QWidget::update() 调用 postEvent()它通过避免多次重绘来消除闪烁并提高速度。 7. 参考 QT事件处理–notify()https://blog.csdn.net/qq_40729688/article/details/89500394官方事件系统介绍文档
http://www.tj-hxxt.cn/news/225346.html

相关文章:

  • 如何建立自己音乐网站潍坊网站建设咨询
  • 开发一个个人网站高清视频网络服务器免费
  • jsp网站建立微信公众号运营大学
  • 医院网站模板下载北京广告公司地址
  • 网站风险怎么解决方案两当网站建设
  • 牡丹江建设网站呼和浩特市城乡建设保障局网站
  • 免费做网站手机模板网站建设+百度
  • 做电影网站视频放在那里做网站用那种数据库
  • 杭州 做网站沈阳男科医院去哪里
  • 网页源码怎么做网站庆阳网红宝军
  • 互联网推广销售好做吗官网关键词优化价格
  • 网站建设合同中英文网站建设 网站优化
  • 做简历最好的网站网站建设黄页软件
  • 设计个企业网站网页咋弄唐河企业网站制作哪家好
  • dw做的网站要多大网络开发工程师是做什么的
  • 重庆做网站哪个好些嘛前端需要学什么语言
  • 共享门店新增跑腿距离计算优化关于seo网站优化公司
  • 云主机网站济南市商务局官方网站
  • 怎样开始学做自媒体河南网站排名优化
  • 南昌专业做网站公司哪家好wordpress 4.5 漏洞
  • 泰州网站建设策划方案福建新闻最新消息
  • 免费网站引导页做网站用微信收款还是支付宝
  • 小游戏网站欣赏如何用wordpress创建主页
  • 网站导航面包屑远涛网站建设
  • 网站设计技术贵州交通建设集团网站
  • 外贸型网站建设公司企业网络安全解决方案
  • 深圳住房和建设局网站统一楼网络规划设计方案
  • 做医院网站公司福建省建设干部培训中心网站
  • 多个页面网站的制作方法wordpress.org
  • 湖南服装网站建设百度一下官方网址