2026/1/1 8:43:38
网站建设
项目流程
济南免费做网站,如何免费建一个wordpress,wordpress插件怎么使用,电脑版网站转手机版怎么做目录1#xff0c;事件的概念2#xff0c;事件循环3#xff0c;父子控件之间事件的传递处理4#xff0c;事件过滤器1#xff0c;事件的概念
定义#xff1a; 事件是应用程序内部发生的事情或应用程序需要知道的外部事件的结果。
事件和信号的区别#xff1a; 事件是由外…目录1事件的概念2事件循环3父子控件之间事件的传递处理4事件过滤器1事件的概念定义事件是应用程序内部发生的事情或应用程序需要知道的外部事件的结果。事件和信号的区别事件是由外部向内部信号是由内部向外部。事件先发生信号后发生。2事件循环intmain(){do_step1();do_step2();}等待事件发生之后再退出。intmain(){while(!is_quit()){do_step1();do_step2();}}当我们运行程序时会向操作系统注册回调函数当有事件发生时操作系统会调用回调函数此时会记录发生的事件是那种类型的事件然后将事件加入到一个消息队列当中此时一个循环就会处理消息队列中存储的事件然后根据对应事件去进行逻辑处理。3父子控件之间事件的传递处理以上两个图描述的是Qt负责处理事件处理的类关系图和Qt中常用的处理事件的几种方式。在实际的项目中会经常处理父子窗口之间的事件传递那么事件传递的机制是怎样的呢以下是两个事件处理函数。其中Widget是父窗口MyLineEdit是子窗口。当出现事件时说先处理子窗口后处理父窗口。但是以上的编码实际上在多次出现某种事件之后父窗口的事件只执行了一次。所以需要在子窗口的事件函数中添加代码 event-ignore();此外重写处理函数时需要调用基类的处理函数。有的时候根据需要我们需要事件进行子窗口到父窗口的传递有时候不需要那么怎么控制传递呢event-ignore(); 允许事件进行子窗口到父窗口的传递。event-accept(); 阻止事件进行子窗口到父窗口的传递。4事件过滤器通常情况下一个父窗口中往往会有很多子窗口而此时发生在这个窗口中的事件需要我们去一 一 处理很多时候我们需要分清楚这个事件是发生在哪个子窗口中的这个时候我们就需要事件过滤器去帮助我们判断。假设我们的父窗口类为 Widget 子窗口类为 MyLineEdit 。应用事件过滤器首先要重写bool QObject::eventFilter(QObject *watched, QEvent *event);函数其次还要给主窗口安装事件过滤器ui-lineEdit-installEventFilter(this);在这个示例里面表示是一个名为lineEdit控件安装事件过滤器。示例bool Widget::eventFilter(QObject*watched,QEvent*event){if(watchedui-lineEdit){if(event-type()QEvent::KeyPress){//进行相应逻辑处理}}}