2014-02-20 1 views
1

QWidget에서 상속 된 3 개의 클래스가 있습니다. 첫 번째 객체의 버튼을 클릭하면 두 번째 객체가 생성됩니다. 초 객체의 버튼을 클릭하면 세 번째 객체가 생성됩니다. 세 번째 객체에는 하나의 버튼 "종료"가 있습니다. 이 버튼을 클릭하면 세 번째 객체와 두 번째 객체를 닫아야합니다. 두 번째 개체에서 세 번째 개체의 단추를 클릭 한 것을 어떻게 알 수 있습니까?QWidget이 닫혀 있는지 확인하는 방법은 무엇입니까?

class First : public QWidget { 
    Q_OBJECT 
    public: 
     First(); 
     virtual ~First(); 

    private slots: 
     void quit(); 
     void createSecond(); 

    private: 
     Ui::First widget; 
     Second *second; 
}; 

class Second : public QWidget { 
    Q_OBJECT 
    public: 
     Second(); 
     virtual ~Second(); 

    private slots: 
     void createThird(); 
     void quit(); 

    private: 
     Ui::Second widget; 
}; 

class Third : public QWidget { 
    Q_OBJECT 
    public: 
     Third(); 
     virtual ~Third(); 

    private slots: 
     void quit(); 

    private: 
     Ui::Third widget; 
}; 

답변

2

당신은 단순히 두 번째 위젯의 quit() 슬롯과 제 3 목적의 버튼의 (선언되어야한다)를 buttonClicked 신호를 연결할 수 있습니다 : 당신이 클릭 할 때 buttonClicked() 신호를 방출 할 수

Second::createThird() 
{ 
    [..] 
    Third *third = new Third; 
    connect(third, SIGNAL(buttonClicked()), this, SLOT(quit()); 
    [..]  
} 

버튼을 누르거나 할 그 세 번째 위젯의 Third::closeEvent(QCloseEvent *) 가상 함수의 implmentation에서 :

Third::closeEvent(QCloseEvent *event) 
{ 
    emit buttonClicked(); 
    QWidget::closeEvent(event); 
} 
+0

덕분에 도움을 많이! 정말 유용합니다. – andrei

0

또는 , 당신은 두 번째로 만들 수 있습니다

void Second::process() { 
    if (!widget->isVisible()) 
    close(); 
} 

과 :

Second::Second() { 
    QTimer *timer = new QTimer(this); 
    connect(timer, SIGNAL(timeout()), this, SLOT(process())); 
    timer->start(); 
} 
관련 문제