例如:我有两个窗口(A和B)。 A的一个实例当前打开了一个组合框(在数据库中加载了项目)。我点击“编辑”按钮,打开窗口B,允许我编辑上述数据库的内容。我需要的是窗口A在我按下窗口B中的“保存”或关闭窗口B时自动刷新其内容。
我能想到的所有代码:
a.cpp
b *new_window = new b;
b->show();
b->passwindowfunction(this);
b.cpp
void b::passwindowfunction(sometypeidkwht window)
{
window->combobox...
}
至于头文件,我不知道我会说什么。
答案 0 :(得分:1)
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();
由于之前的连接呼叫,WindowA将更新其内容。
关于关闭窗口,如果在关闭时删除WindowB,只需在WindowB的析构函数中发出Saved()信号以获取更新,否则处理close事件: -
void WindowB::closeEvent(QCloseEvent *event)
{
emit Saved();
QWindow::closeEvent(event);
}
答案 1 :(得分:0)
你问的很模糊。您可以使用基于QDialog的小部件。打开模态。然后,您可以在关闭时查询其状态。无论你关闭窗口,还是按下“保存”。
您还可以使用A中的插槽连接保存按钮的clicked()信号。但是,当窗口B关闭时,您必须编写额外的代码。覆盖窗口B的closeEvent。在信号上你必须更新你的QComboBox。
或者,绝对奢侈品变体,您为QComboBox使用数据库感知模型,例如:基于QSqlQueryModel。然后,当您更改数据库中的数据时,QComboBox会自动更新。