将打开的窗口实例作为参数传递到第二个窗口中
Pass opened window instance as parameter into second window
例如:我有两个窗口(A和B)。A的一个实例当前使用组合框打开(加载了数据库中的项目)。我点击"编辑"按钮,窗口B打开,允许我编辑上述数据库的内容。我需要的是当我在窗口B中按"保存"或关闭窗口B时,窗口A自动刷新其内容。
我能想到的所有代码:
a.cpp
b *new_window = new b;
b->show();
b->passwindowfunction(this);
b.cpp
void b::passwindowfunction(sometypeidkwht window)
{
window->combobox...
}
至于头文件,我不知道该声明什么。
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声明了一个slot函数,该函数将在需要更新时被调用,而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()信号,让WindowA得到更新,否则处理关闭事件:-
void WindowB::closeEvent(QCloseEvent *event)
{
emit Saved();
QWindow::closeEvent(event);
}
你问的问题非常模糊。您可以使用基于QDialog的小部件。以模态打开它。然后您可以在它关闭时查询它的状态。不管您是关闭了窗口,还是按下了"保存"。
你也可以将保存按钮的clicked()信号与a中的一个插槽连接起来。但当窗口B关闭时,你必须编写额外的代码。覆盖窗口B的closeEvent。在信号上,您必须更新您的QComboBox。
或者,绝对奢华的变体,您为QComboBox使用数据库感知模型,例如基于QSqlQueryModel。然后,当您更改数据库中的数据时,您的QComboBox会自动更新。
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 创建第二个应用窗口并显示它
- 如何按z顺序获取第二个活动窗口?
- 打开第二个窗口后隐藏主窗口?另外,当用户关闭第二个窗口时,主窗口如何重新出现
- 使用第二个线程快速更新 GUI 窗口会通过调整窗口大小或移动窗口而崩溃
- 2个线程 - 一个带有OpenGL窗口的线程,第二个带有WXWIDGETS的窗口
- 将打开的窗口实例作为参数传递到第二个窗口中
- 一个窗口上的MFC:X按钮也在关闭第二个窗口
- 打开Qt中的第二个窗口
- c++ GUI如何在第二个窗口中使用一个窗口中的私有数据
- 多窗口程序-在第二个窗口上创建按钮
- c++ WinApi注册第二个窗口类错误
- Win32 C++正在第二个监视器中创建窗口
- Qt -显示第二个窗口从主窗口
- OpenGL的第二个窗口在第一个窗口停用土壤纹理