关于qt事件(event)的介绍

关于qt事件(event)的介绍

ID:8992762

大小:16.64 KB

页数:3页

时间:2018-04-14

关于qt事件(event)的介绍_第1页
关于qt事件(event)的介绍_第2页
关于qt事件(event)的介绍_第3页
资源描述:

《关于qt事件(event)的介绍》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、关于QT事件(event)的简单介绍   事件(event)是有系统或者Qt本身在不同的时刻发出的。当用户按下鼠标,敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件是在对用户操作做出响应的时候发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。  一般来说,使用Qt编程时,我们并不会把主要精力放在事件上,因为在Qt中,需要我们关心的事件总会发出一个信号。比如,我们关心的是QPushButton的鼠标点击,但我们不需要关心这个鼠标点击事件,而是关心它的clicked()信号

2、。这与其他的一些框架不同:在Swing中,你所要关心的是JButton的ActionListener这个点击事件。  Qt的事件很容易和信号槽混淆。这里简单的说明一下,signal由具体对象发出,然后会马上交给由connect函数连接的slot进行处理;而对于事件,Qt使用一个事件队列对所有发出的事件进行维护,当新的事件产生时,会被追加到事件队列的尾部,前一个事件完成后,取出后面的事件进行处理。但是,必要的时候,Qt的事件也是可以不进入事件队列,而是直接处理的。并且,事件还可以使用“事件过滤器”进行过滤。总

3、的来说,如果我们使用组件,我们关心的是信号槽;如果我们自定义组件,我们关心的是事件。因为我们可以通过事件来改变组件的默认操作。比如,如果我们要自定义一个QPushButton,那么我们就需要重写它的鼠标点击事件和键盘处理事件,并且在恰当的时候发出clicked()信号。  还记得我们在main函数里面创建了一个QApplication对象,然后调用了它的exec()函数吗?其实,这个函数就是开始Qt的事件循环。在执行exec()函数之后,程序将进入事件循环来监听应用程序的事件。当事件发生时,Qt将创建一个事

4、件对象。Qt的所有事件都继承于QEvent类。在事件对象创建完毕后,Qt将这个事件对象传递给QObject的event()函数。event()函数并不直接处理事件,而是按照事件对象的类型分派给特定的事件处理函数(eventhandler)。  在所有组件的父类QWidget中,定义了很多事件处理函数,如keyPressEvent()、keyReleaseEvent()、mouseDoubleClickEvent()、mouseMoveEvent()、mousePressEvent()、mouseReleas

5、eEvent()等。这些函数都是protectedvirtual的,也就是说,我们应该在子类中重定义这些函数。下面来看一个例子。#include #include #include #include class EventLabel : public QLabel{protected:        void mouseMoveEvent(QMouseEvent *event);        void mousePressEvent(QMouseEvent *event);        void mou

6、seReleaseEvent(QMouseEvent *event);};void EventLabel::mouseMoveEvent(QMouseEvent *event){        this->setText(QString("Move: (%1, %2)")                                                        .arg(QString::number(event->x()), QString::number(event->y())));

7、}void EventLabel::mousePressEvent(QMouseEvent *event){        this->setText(QString("Press: (%1, %2)")                                                        .arg(QString::number(event->x()), QString::number(event->y())));}void EventLabel::mouseReleaseEven

8、t(QMouseEvent *event){        QString msg;        msg.sprintf("Release: (%d, %d)",                                event->x(), event->y());        this->setText(msg);}int main(int argc, char *argv[]){        Q

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。