qt事件机制
来源:互联网 发布:java 月份第一天 编辑:程序博客网 时间:2024/06/10 00:41
今天,想在界面上通过手势来显示一个对话框,学习了事件。
一、事件机制
* Spontaneous 事件,由窗口系统产生,它们被放到系统队列中,通过事件循环逐个处理。
* Posted 事件,由Qt或是应用程序产生,它们被Qt组成队列,再通过事件循环处理。
* Sent 事件,由Qt或是应用程序产生,但它们被直接发送到目标对象。
事件的处理流程大概是:先处理posted事件,然后处理spontaneous事件,当然是在没有执行退出事件前提下。send 事件并不在事件循环内处理,它们都直接被发送到了目标对象。
调用QApplication::exec()时,程序进入了Qt的事件循环,
while (!exit_was_called)
{
while(!posted_event_queue_is_empty)
{
process_next_posted_event();
}
while(!spontaneous_event_queue_is_empty)
{
process_next_spontaneous_event();
}
while(!posted_event_queue_is_empty)
{
process_next_posted_event();
}
}
可以在任何时候调用QApplication::sendPostedEvent(),强制Qt产生一个对象的posted事件。
二、产生事件
QT应用程序可以产生他们自己的事件,或是预定义类型,或是自定义类型。 这可以通过创建QEvent类或它的子类的实例,并且调用QApplication:postEvent()或QApplication::sendEvent()来实现。
这两个函数需要一个 QObject* 与一个QEvent * 作为参数,假如你调用postEvent(),你必须用 new 操作符来创建事件对象,Qt会它被处理后帮你删除它。假如你用sendEvent(), 你应该在栈上来创建事件。下面举两个例子:
一是posting 事件:
QApplication::postEvent(mainWin, new QKeyEvent(QEvent::KeyPress,Key_X,'X',0));
二是sending 事件:
QKeyEvent event(QEvent::KeyPress, Key_X, 'X', 0);
QApplication::sendEvent(mainWin, &event);
三、自定义事件
演示如何post一个定制事件的代码片段:
const QEvent::Type MyEvent = (QEvent::Type)1234;
...
QApplication::postEvent(obj, new QCustomEvent(MyEvent));
事件必须是QCustomEvent类型(或子类)的。构造函数的参数是事件的类型,1024以下被Qt保留。其他可被程序使用。为处理定制事件类型,要重新实现customEvent()函数:
void MyLineEdit::customEvent(QCustomEvent *event)
{
if (event->type() == MyEvent) {
myEvent();
} else {
QLineEdit::customEvent(event);
}
}
QcustomEvent类有一个void *的成员,可用于特定的目的。你也可以子类化QCustomEvent,加上别的成员,但是你也需要在customEvent()中转换QCustomeEvent到你特有的类型。
- QT中的事件机制
- qt 事件机制
- (转)QT事件机制
- qt 事件机制
- QT的事件机制
- qt 事件机制
- qt 事件机制
- QT中的事件机制
- qt 事件机制
- QT中的事件机制
- Qt事件处理机制
- QT中的事件机制
- Qt事件机制详解
- Qt事件机制浅析
- qt事件机制
- Qt事件机制
- qt 事件机制
- Qt事件机制浅析
- 解决新浪微盘下载没反应下载中断
- 类模板的定义和使用
- 扁鹊三兄弟
- Tomcat debug模式下特别慢但是run正常处理方法
- 程序员,向左或向右
- qt事件机制
- Android内存优化二:使用软引用和弱引用
- 未能找到元数据文件”,在重新生成项目,并在其他项目中引用时出现
- Thrift入门及Java实例(一)
- R projects at Google Summer of Code 2016
- javascript:void(0)的含义理解
- Android内存优化三:对Bitmap的内存优化
- 关于ListFragment的基本写法及注意事项
- bananapi之DSI