我有三个从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;
};
答案 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();
}