2016-07-01 2 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); 
} 

Затем КНОПКА исчез, как обычно, потому что я уже маскируется его paintEvent с eventFilter. Но виджет окрашен в синий цвет. Почему виджет не исчез.

+0

Но QPushButton происходит от QWidget, и это работает, не так ли? –

+0

Возможно, вы захотите проверить значение свойства 'autoFillBackground' для' QWidget' и 'QPushButton'. –

ответ

Смежные вопросы