Qt事件系统与应用举例

栏目: IT技术 · 发布时间: 4年前

内容简介:点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~今天是五一劳动节的第四天——五四青年节!注:中国国家统计局,青年的年龄是15-34岁。

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~

今天是五一劳动节的第四天——五四青年节!

注:中国国家统计局,青年的年龄是15-34岁。

实事:B站推出宣传视频短片——《后浪》

金融:央行报告城镇居民家庭净资产均值为289.0万元,中位数 141 万元。

一、 官方资料

1.  概述

Qt 中,事件都是从抽象 QEvent 派生出来的对象。 它们表示发生在应用程序内部或由于应用程序需要了解的外部活动而发生的事情。   事件可以由 QObject 子类的任何实例接收和处理,但它们与小部件尤其相关。   本文档介绍了在典型应用程序中如何传递和处理事件。

2. 事件如何传递

当事件发生时, Qt 通过构造适当的 QEvent 子类的实例来创建一个事件对象来表示它,并通过调用 事件函数将其传递到 QObject 的特定实例(或其子类之一)。

该函数不处理事件本身; 根据所传递事件的类型,它针对该特定事件类型调用事件处理程序,并根据事件被接受还是忽略发送响应。

一些事件,例如 QMouseEvent QKeyEvent  ,来自窗口系统。   一些,例如 QTimerEvent  ,来自其他来源 ;有些来自应用程序本身,如自定义事件等。

3. 事件类型

大多数事件类型都有特殊的类,尤其是 QResizeEvent    QPaintEvent    QMouseEvent    QKeyEvent QCloseEvent    每个类都将 QEvent 子类化,并添加特定于事件的函数。   例如,   QResizeEvent 添加了 size ()和 oldSize ()来使小部件能够发现其尺寸如何更改。

4. 事件处理程序

传递事件的通常方法是调用虚拟函数。 例如,通过调用 QWidget :: paintEvent  ()来传递 QPaintEvent    这个虚函数负责适当地做出反应,通常通过重新绘制窗口小部件。   如果您没有在虚拟函数的实现中执行所有必要的工作,则可能需要调用基类的实现。

5. 事件过滤器

6. 发送事件

7. 小结

Qt的主函数中会开启一个事件循环,其实就是一个处理事件的 while 循环。

return a.exec();

二、应用举例

1. 几种事件的使用

函数的声明:

protected:

void changeEvent(QEvent *event);

void showEvent(QShowEvent *event);

void hideEvent(QHideEvent *event);


bool event(QEvent *event);

函数的实现:

void MyWidget::changeEvent(QEvent *event)

{

if (0 != event && QEvent::LanguageChange == event->type())

ui->retranslateUi(this);

QWidget::changeEvent(event);

}


void MyWidget::showEvent(QShowEvent *event)

{

Q_UNUSED(event);

qDebug() << "<< showEvent" ;

}


void MyWidget::hideEvent(QHideEvent *event)

{

Q_UNUSED(event);

qDebug() << "<< hideEvent" ;

}


bool MyWidget::event(QEvent *event)

{

if (event->type() == QEvent::KeyPress)

{

//无法捕获,被窗口焦点优先捕获

QKeyEvent *ke = static_cast<QKeyEvent *>(event);

if (ke->key() == Qt::Key_Tab)

{

// special tab handling here

qDebug() << "press the tab";

return true;

}


if (ke->key() == Qt::Key_Delete)

{

qDebug() << "press the delete";

return true;

}

}

//custom event handling

// else if (event->type() == MyCustomEventType) {

// MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event);

// // custom event handling here

// return true;

// }


return QWidget::event(event);

}

简单说说上面几个事件。

changeEvent  Qt 动态切换语言时用到过

showEventhideEvent 窗体的显示与隐藏。窗口最小化时调用 hideEvent 事件,再次显示调用 showEvent

event   所有产生的事件都会进入这里面,根据需要自行处理

本来想捕获Tab键来着,结果无法捕获,因为被窗口焦点优先捕获。

所以捕获了Delete键

④自定义事件的使用

效果:

Qt事件系统与应用举例

由于结束了事件循环,a.exec()函数返回, Widget 窗体函数超出作用域失效,窗体消失。

三、小结

大家五四青年节快乐!!!

欢迎关注公众号:

Qt事件系统与应用举例


以上所述就是小编给大家介绍的《Qt事件系统与应用举例》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

赢在用户

赢在用户

[美]Steve Mulder、[美]Zivv Yarr / 范晓燕 / 机械工业出版社 / 2007-08-01 / 29.00

您如何保证您的网站确实给予用户他们所需要的,并对您产生商业成果?您需要了解谁是您的用户,您的用户的目标、行为和观点是什么,还要把他们的需求当成您的第一要务。人物角色将用户研究带入了一个更高的境界,成为实施真正以用户为中心的在线商业策略最高效的工具。本书将伴随您走过创建人物角色的每一个步骤,包括进行定性、定量的用户研究,生成人物角色分类,使人物角色真实可信等。您也将学会如何有效地通过这个工具,来完成......一起来看看 《赢在用户》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具