有些时候我们希望通过鼠标点击窗口外部来关闭当前窗口,这里主要用到两种方法;
- [virtual] bool QObject::event(QEvent *e);
- [virtual] bool QObject::eventFilter(QObject *watched, QEvent *event);
方式一:重写窗口[virtual] bool QObject::event(QEvent *e)
该方式最简单,但是有一个弊病,需要为每个要实现该功能的窗口都重写该函数。
bool Form::event(QEvent *event)
{
if (event->type() == QEvent::ActivationChange)
{
if(QApplication::activeWindow() != this)
{
this->close();
}
}
return QWidget::event(event);
}
方式二:重写[virtual] bool QObject::eventFilter(QObject *watched, QEvent *event)
步骤一:为每个要实现该功能的窗口安装事件过滤void QObject::installEventFilter(QObject *filterObj),一般在构造函数里安装;
MainWindow::MainWindow(QWidget *parent) :
QMai