事件过滤时QWidget上出现意外行为

时间:2016-07-01 03:40:15

标签: qt qwidget qpushbutton eventfilter

我刚刚在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。但小部件已经涂成了蓝色。为什么小部件没有消失。

1 个答案:

答案 0 :(得分:0)

我已使用QEvent::Paint更改QEvent::Polish来解决问题。

To who wanted the detailed description

谢谢大家。