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

What is the best way to communicate between two windows in Qt

本文关键字:通信 最佳 方法 是什么 之间 两个 QT 窗口      更新时间:2023-10-16

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

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

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

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

您应该将主窗口隐藏在perfers_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()信号来调用在应用程序生命周期期间的登录。

登录窗口应为QDialog衍生窗口。这具有acceptedrejected信号,您可以在主窗口中琐碎地处理。(这回答标题中的问题)

在创建它们的位置并不重要,这确实是一个风格问题。我可能会自己把它放在main中,但是如果我接管了现有的代码库,我不会费心更改此类详细信息。