Qt5从子窗口更新MainWindow

时间:2016-05-09 18:44:39

标签: qt5 parent-child signals-slots

我的QT项目中有两个Windows。 MainWindowLoad。当MainWindow关闭时,我想更新Load中的某些字段。我已经尝试了几件事。我还有一个名为update_channel()的函数,可以完成所有必要的操作。现在,我使用PushButton手动执行更改。这工作正常,但我需要在加载窗口关闭时自动调用此函数。例如,我试过:

connect(load, SIGNAL(load->close()), this, SLOT(update_channel()));

connect(load, &Load::update_mainwindow(), ui->pb_update, &QPushButton::click);
(with a public signal in "load.h" and emit update_mainwindow in "load.cpp")

我没有想法,而且我不知道谷歌的用途,我找到的所有提示都没有。

我使用的是Qt Creator 3.6.0(适用于Qt 5.5.1)

2 个答案:

答案 0 :(得分:0)

QDialog类进行子类化,并向其添加一个信号,例如调用它close。然后覆盖closeEvent成员函数并从那里发出close信号。另外,请确保您的update_channel()功能是一个插槽。然后将close信号连接到update_channel插槽,您就完成了。

另一种方法是使用QDialog现有信号之一:acceptedrejected。它们并不完全等同于上述解决方案,但也应该是可以接受的,因为通常会接受或拒绝对话。

答案 1 :(得分:0)

我自己解决了。问题不在于connect语句的定义。问题是我的代码中我放置这段代码的行。

我把“connect”放在我的代码的开头,没有“加载”窗口。所以我改成了:

load = new Load(this);
connect(load, SIGNAL(update_mainwindow()), this, SLOT(update_channel()));
load->show();

现在它按预期工作了!