转载自:https://www.cnblogs.com/findumars/p/4780392.html
- void QWidget::focusOutEvent ( QFocusEvent * event ) [virtual protected]
任何一个时候,我们的Windows桌面上总有一个最前台的窗口,其实说简单的,就是标题栏变成深蓝色的那个窗口,仅此一个,这个窗口就是前景窗口(Foreground Window),其他窗口就是后台窗口(Background Window)。那创建前景窗口的线程就是前景线程(Foreground Thread),这个线程并不一定就是应用程序的主线程。
线程内部会维护当前自己的活动窗口(Active Window)和焦点窗口(Focus Window), 焦点窗口其实只是窗口的一个属性,其实就是“焦点状态”是窗口的一个属性,而焦点窗口的顶层窗口就是活动窗口,举个例子:一个对话框中有一个按钮,当按钮 获得焦点的时候,那此按钮就是焦点窗口,则包含此按钮的对话框就是活动窗口,若出现窗口嵌套的情况,则最根的那个窗口才是活动窗口。
- class MyWidget : QWidget //
- {
- prviate:
- public:
- MyWindget();
- protected:
- bool eventFilter(QObject *o, QEvent *e);//事件过滤器
- }
- MyWidget::MyWidget()
- {
- QWidget::installEventFilter(this);//为这个窗口安装过滤器
- }
- 在类中重载eventFilter函数:
- bool MyWidget::eventFilter(QObject *watched, QEvent *event)
- {
- if( watched == this )
- {
- //窗口停用,变为不活动的窗口
- if(QEvent::WindowDeactivate == event->type())
- {
- //
- //DEBUGP( “eventFilter” ) ;
- hide(); //或者关闭窗口,加入自己的操作.
- return true ;
- }
- else
- {
- return false ;
- }
- }
- return false ;
- }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200225.html原文链接:https://javaforall.net
