Qt事件系统与应用举例

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

内容简介:点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~今天是五一劳动节的第四天——五四青年节!注:中国国家统计局,青年的年龄是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事件系统与应用举例》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

增长黑客

增长黑客

Sean Ellis / 张溪梦 / 中信出版集团股份有限公司 / 2017-11-1 / CNY 59.00

脸谱网如何从默默无闻到坐拥二十几亿用户? 爱彼迎、优步何以在短短时间估值超过百亿美元? 领英怎样跨步成为全球领先的职业社交平台? 这些初创公司实现爆发式成长的共同奥秘就是增长黑客。 增长黑客是硅谷当下热门的新商业方法论,其精髓在于通过快节奏测试和迭代,以极低甚至零成本获取并留存用户。 作为最早提出“增长黑客”概念的理论先驱、带领Dropbox实现500%增长的实战领军......一起来看看 《增长黑客》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

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

在线图片转Base64编码工具