c++ - Qt 中两个窗口之间通信的最佳方式是什么

标签 c++ qt qt-creator

在 Qt 中两个窗口之间通信的最佳方式是什么?

我需要有一个单独的登录窗口和一个接一个出现的主应用程序窗口(第二个,我的意思是主应用程序窗口,只有在登录成功时才会显示)。我应该在主函数中创建这两个对象(登录窗口和主应用程序对象),还是将登录窗口数据成员作为主应用程序类的数据成员并在主应用程序类的构造函数中创建?

最佳答案

您可以创建登录窗口作为主应用程序类的数据成员,并在其构造函数中创建它。接下来,您可以通过连接名为 login_ 的信号来调用登录 主类的 asked() 到一个名为 perform_login() 的插槽,然后发出信号:

QObject::connect(this,SIGNAL(login_asked()),this,SLOT(perform_login())
                                                ,Qt::QueuedConnection);
emit login_asked();

您应该将主窗口隐藏在 perform_login() 插槽中,并显示您的登录表单,如:

this->setVisible(false);

loginfm->show();

您可以通过信号和插槽通知您的主应用程序登录失败或成功:

QObject::connect(loginfm,SIGNAL(login_accepted()),this,SLOT(entered()));
QObject::connect(loginfm,SIGNAL(login_canceled()),this,SLOT(canceled()));

在主窗口的 entered() 插槽中,您应该显示主窗口:

this->setVisible(true);

这样,您只需发出 login_asked() 信号,就可以在应用程序生命周期内尽可能多地调用登录。

关于c++ - Qt 中两个窗口之间通信的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22325524/

相关文章:

c++ - 从定义的复制构造函数调用默认(隐式)复制构造函数

c++ - 名称中的限定名称查找

c++ - 如何创建自定义 boost::posix_time to_string 格式化程序?

c++ - 翻译在 Qt 中不起作用

c++ - QGraphicsScene mouseMoveEvent 在 QGraphicsView wheelEvent 之前不起作用

c++ - 如何将hdfk库用到qt中?

Qt Mac 二进制安装无法在 PowerPC/G5 上运行

Qt Creator Beautifier 和不同的项目

c - 如何在 Qt Creator 中为 Clang 静态分析器设置语言标准 (-std)

qt - 了解 ui_mainwindow.h 在 Qt Creator 小部件模板中的位置