qt常用技术及用法 QT事件理解

事件由程序窗口或外部产生的事情或某种动作,如按下键盘、鼠标,就会产生一个键盘事件、鼠标事件,我来为大家讲解一下关于qt常用技术及用法 QT事件理解?跟着小编一起来看一看吧!

qt常用技术及用法 QT事件理解

qt常用技术及用法 QT事件理解

事件

事件由程序窗口或外部产生的事情或某种动作,如按下键盘、鼠标,就会产生一个键盘事件、鼠标事件。

事件循环

Qt 中有一个事件循环(即main函数中 QApplication a(argc, argv); a.exec();//启动事件循环),该循环负责从可能产生事件的地方捕获各种事件,并把这些事件放入事件队列或不存入事件队列,然后统一由 Qt 的QCoreApplication::notify(QObject *receiver, QEvent *event)发给给需要处理事件的对象来处理事件。

receiver 一般为窗口对象

notify函数里调用 receiver->event(event);

事件发送
  • QCoreApplication::sendEvent(receiver, event)

函数内部使用notify() 从事件处理函数返回 ;通常事件放在栈上创建。

{

QMouseEvent event();

QApplication::sendEvent(mainWindow, &event);

}

  • QCoreApplication::postEvent(receiver, event)

函数将事件存入事件队列并立即返回 ;通常事件放在堆上创建,事件队列会获得该事件所有权,该事件被投递时,事件队列会自动delete该事件。程序进入事件循环遍历事件队列,对每一个事件调用notify()。

{

//不用 delete event

QMouseEvent* event = new QMouseEvent();

QApplication::sendEvent(mainWindow, &event);

}

和信号的区别
  1. 信号是由对象产生的,而事件则不一定由对象产生。而且也可以自定义事件。
  2. Qt 开发中,当产生某种事件时,派生自QWidget的子控件都会发射一个相应的信号(即 Qt 会把事件转换为一个对应的信号)。

比如按钮被按下时,会产生一个MouseButtonPress 事件。Qt 会处理这一事件,并且会发射一个 clicked()单击信号,程序员可以直接处理 clicked()信号,写一个clicked的槽函数,而不必处理底层的事件。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页