2016-07-01 45 views
0

只是我在QPushButton和QWidget上测试了以下代码,并且遇到了不同的行为。但为什么?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。但小部件涂成蓝色。为什么小部件没有消失。

+0

但QPushButton派生自QWidget,它的工作,对吧? –

+0

您可能想检查'QWidget'和'QPushButton'的'autoFillBackground'属性的值。 –

回答

相关问题