Qt 的信号/插槽系统在这里为您提供了您所需要的。你可以这样做: -
class QWindowA : public QWindow
{
Q_OBJECT
private slots:
void RefreshContent(); // refreshes content of the window
};
class QWindowB : public QWindow
{
Q_OBJECT
public:
void Save(); // save content and emit Saved() signal
signals:
void Saved();
};
如您所见,WindowA 声明了一个槽函数,当它需要更新时将调用该函数,而 WindowB 有一个信号 Saved()。
您需要将 Saved 的信号连接到插槽 RefreshContent() :-
// Assuming instances winA and winB have been created
connect(winB, &WindowB::Saved, winA, &WindowA::RefreshContent); // using Qt 5 connect call
在 WindowB 的 Save() 函数中,当您完成保存内容时会发出 Saved() 信号:-
emit Saved();
由于之前的 connect 调用,WindowA 将更新其内容。
至于关闭窗口,如果您在 WindowB 关闭时删除它,只需在 WindowB 的析构函数中发出 Saved() 信号以使 WindowA 得到更新,否则处理关闭事件:-
void WindowB::closeEvent(QCloseEvent *event)
{
emit Saved();
QWindow::closeEvent(event);
}