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

时间:2014-03-11 12:18:11

标签: c++ qt qt-creator

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

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

2 个答案:

答案 0 :(得分:3)

您可以创建登录窗口作为主应用程序类的数据成员,并在其构造函数中创建它。接下来,您可以通过连接名为login_的信号来调用登录 问一个名为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()));

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

this->setVisible(true);

这样,只需发出login_asked()信号,就可以在应用程序生命周期中调用任意多个登录名。

答案 1 :(得分:1)

登录窗口应该是QDialog派生的窗口。这有acceptedrejected信号,您可以在主窗口中轻松处理这些信号。 (这回答标题中的问题)

在创建它们的地方并不重要,这确实是一种风格问题。我自己可能会把它放在main中,但如果我接管了现有的代码库,我就不会更改这些细节了。