内容简介:点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~今天是五一劳动节的第四天——五四青年节!注:中国国家统计局,青年的年龄是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 动态切换语言时用到过
② showEvent 、 hideEvent 窗体的显示与隐藏。窗口最小化时调用 hideEvent 事件,再次显示调用 showEvent 。
③ event 所有产生的事件都会进入这里面,根据需要自行处理
本来想捕获Tab键来着,结果无法捕获,因为被窗口焦点优先捕获。
所以捕获了Delete键
④自定义事件的使用
效果:
由于结束了事件循环,a.exec()函数返回, Widget 窗体函数超出作用域失效,窗体消失。
三、小结
大家五四青年节快乐!!!
欢迎关注公众号:
以上所述就是小编给大家介绍的《Qt事件系统与应用举例》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 设计模式应用举例
- Python装饰器举例分析
- 前端模板引擎Handlebars理解与举例
- 举例简介Lua中函数的基本用法
- 标注图+部分举例聊聊Vue生命周期
- Qt ModelView教程(二)——应用举例(一)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。