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

그런 다음 pushFutton은 정상적으로 사라졌습니다. 그 이유는 eventFilter를 사용하여 paintEvent를 마스크했기 때문입니다. 그러나 위젯은 파랗게 칠 해졌다. 왜 위젯이 사라지지 않았는지.

+0

그러나 QPushButton은 QWidget에서 파생되었으며 그 작업은 맞습니까? –

+0

'QWidget'과'QPushButton' 둘 다'autoFillBackground' 속성의 값을 확인하고 싶을 수도 있습니다. –

답변