2014-02-20 99 views
1

我有三个从QWidget继承的类。单击第一个对象的按钮创建第二个对象。点击秒对象的按钮创建第三个对象。第三个对象有一个按钮“退出”。点击这个按钮应该关闭第三个对象和第二个对象。我如何知道第二个对象中第三个对象的按钮被点击了?如何检查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()插槽第二小的连接第三个目的的按钮buttonClicked信号(应该声明):

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

可以发出buttonClicked()信号,当你点击按钮,或做在你的第三小的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(); 
}