在 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/