如何检查QWidget是否已关闭?

时间:2014-02-20 15:39:56

标签: c++ qt qwidget

我有三个从QWidget继承的类。单击第一个对象的按钮可创建第二个对象。单击Seconds对象的按钮可创建第三个对象。第三个对象有一个按钮“退出”。单击此按钮应关闭第三个对象和第二个对象。如何在第二个对象中知道单击了第三个对象的按钮?

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 个答案:

答案 0 :(得分:2)

您只需将第三个对象按钮的buttonClicked信号(应声明)与第二个小部件的quit()插槽相连接:

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

当您单击按钮时,您可以发出buttonClicked()信号,或者在第三个小部件的Third::closeEvent(QCloseEvent *)虚拟功能的实施中执行此操作:

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

答案 1 :(得分:0)

或者,你可以在第二个创建:

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

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