网站建设 月光博客,云网站,有名的公关公司,网站切图是什么意思1. 事件
众所周知Qt是一个基于C的框架#xff0c;主要用来开发带窗口的应用程序#xff08;不带窗口的也行#xff0c;但不是主流#xff09;。我们使用的基于窗口的应用程序都是基于事件#xff0c;其目的主要是用来实现回调#xff08;因为只有这样程序的效率才是最高…1. 事件
众所周知Qt是一个基于C的框架主要用来开发带窗口的应用程序不带窗口的也行但不是主流。我们使用的基于窗口的应用程序都是基于事件其目的主要是用来实现回调因为只有这样程序的效率才是最高的。所以在Qt框架内部为我们提供了一些列的事件处理机制当窗口事件产生之后事件会经过事件派发 - 事件过滤-事件分发-事件处理几个阶段。Qt窗口中对于产生的一系列事件都有默认的处理动作如果我们有特殊需求就需要在合适的阶段重写事件的处理动作。
事件event是由系统或者 Qt 本身在不同的场景下发出的。当用户按下/移动鼠标、敲下键盘或者是窗口关闭/大小发生变化/隐藏或显示都会发出一个相应的事件。一些事件在对用户操作做出响应时发出如鼠标/键盘事件等另一些事件则是由系统自动发出如计时器事件。
每一个Qt应用程序都对应一个唯一的 QApplication应用程序对象然后调用这个对象的exec()函数这样Qt框架内部的事件检测就开始了程序将进入事件循环来监听应用程序的事件。
每一个Qt应用程序都对应一个唯一的 QApplication应用程序对象然后调用这个对象的exec()函数这样Qt框架内部的事件检测就开始了程序将进入事件循环来监听应用程序的事件。
int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow* w new MainWindow;w.show();return a.exec();
}1.1 事件在Qt中产生之后的分发过程是这样的
1.当事件产生之后Qt使用用应用程序对象调用notify()函数将事件发送到指定的窗口
[override virtual] bool QApplication::notify(QObject *receiver, QEvent *e);2.事件在发送过程中可以通过事件过滤器进行过滤默认不对任何产生的事件进行过滤。
// 需要先给窗口安装过滤器, 该事件才会触发
[virtual] bool QObject::eventFilter(QObject *watched, QEvent *event)3.当事件发送到指定窗口之后窗口的事件分发器会对收到的事件进行分类:
[override virtual protected] bool QWidget::event(QEvent *event);4.事件分发器会将分类之后的事件鼠标事件、键盘事件、绘图事件。。。分发给对应的事件处理器函数进行处理每个事件处理器函数都有默认的处理动作我们也可以重写这些事件处理器函数比如鼠标事件
// 鼠标按下
[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event);
// 鼠标释放
[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event);
// 鼠标移动
[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event);2. 事件处理器函数
以QWidget为例 测试案例
相关文章: