事件过滤时 QWidget 上的意外行为
Unexpected behavior on QWidget while the event filtering
我刚刚在 QPushButton 和 QWidget 上测试了以下代码,我遇到了不同的行为。但是为什么?
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->widget->setStyleSheet("background:blue;");
ui->pushButton->setStyleSheet("background:blue;");
ui->widget->installEventFilter(this);
ui->pushButton->installEventFilter(this);
...
}
bool MainWindow::eventFilter(QObject* watched, QEvent* event)
{
if (watched==ui->pushButton && event->type()==QEvent::Paint)
{
// Do nothing
return true;
}
else if (watched==ui->widget && event->type()==QEvent::Paint)
{
// Do nothing
return true;
}
else
return QMainWindow::eventFilter(watched, event);
}
然后,pushButton 像往常一样消失了,因为我用 eventFilter 屏蔽了它的 paintEvent。但是小部件已涂成蓝色。为什么小部件没有消失。
我已经解决了将 QEvent::Paint
更改为 QEvent::Polish
的问题。
To who wanted the detailed description
谢谢大家
我刚刚在 QPushButton 和 QWidget 上测试了以下代码,我遇到了不同的行为。但是为什么?
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->widget->setStyleSheet("background:blue;");
ui->pushButton->setStyleSheet("background:blue;");
ui->widget->installEventFilter(this);
ui->pushButton->installEventFilter(this);
...
}
bool MainWindow::eventFilter(QObject* watched, QEvent* event)
{
if (watched==ui->pushButton && event->type()==QEvent::Paint)
{
// Do nothing
return true;
}
else if (watched==ui->widget && event->type()==QEvent::Paint)
{
// Do nothing
return true;
}
else
return QMainWindow::eventFilter(watched, event);
}
然后,pushButton 像往常一样消失了,因为我用 eventFilter 屏蔽了它的 paintEvent。但是小部件已涂成蓝色。为什么小部件没有消失。
我已经解决了将 QEvent::Paint
更改为 QEvent::Polish
的问题。
To who wanted the detailed description
谢谢大家