在调用close()时,ui不会关闭



在Qt中,我有两种形式,即FirstUI和SecondUI。main打开FirstUI。在这里,我检查应用程序所需的数据库是否存在,如果不存在,则创建一个新的数据库。它还检查数据库中是否存储了任何wifi网络的详细信息。如果有最后一次连接的wifi的详细信息,那么应用程序会扫描可用网络,并使用数据库中的详细信息连接到wifi网络。

现在,如果数据库中没有wifi详细信息,或者数据库中列出的网络不存在,或者应用程序无法连接到wifi网络,它将发出信号WifiNotConnected();

我已将信号连接到打开SecondUI的插槽。

connect(this,SIGNAL(WifiNotConnected()),this,SLOT(OpenSecondUI()));
.....
void FirstUI::OpenSecondUI()
{
SecondUI *sec = new SecondUI();
this->close();
sec->show();
}

SecondUI会打开,但不会关闭FirstUI。

编辑:如果存在wifi详细信息,我有一个类(WifiBoot),它继承了QObject并为我执行连接任务。由于我希望GIF文件在GUI中播放,并且连接发生在我实例化了执行wifi连接的类(WifiBoot)并将其移到另一个线程的同时。连接wifi后,我发出完成的信号,该信号连接到插槽以打开SecondUI

connect(worker,SIGNAL(finished()),this,SLOT(FinishedConnection()));
void FirstUI::FinishedConnection()
{
OpenSecondUI();
}

在这里,它关闭FirstUI并打开SecondUI。但在第一种情况下,情况并非如此。为什么会发生这种情况?有更好的方法吗?感谢提供的任何帮助

首先检查

this->close();

返回true。另一件事可能是使用隐藏它

QWidget::hide()

以及将FirstUI设置为SecondUI的父级,这样如果您有多个FirstUI实例,您的应用程序就不会泄漏内存。(如果您仍然close()小部件,请忘记父对象)

欢呼

OpenSecondUI()是在构造函数本身中调用的。因此,OpenSecondUI()中的close()是在UI启动并运行之前发生的。为了按照QT论坛中的建议解决这个问题,并通过@andrea.marangoni提示构造函数填充过多,我使用了一个单次计时器,将构造函数中的整个代码移动到一个插槽中,并在一定延迟后调用该插槽。这确保了在调用插槽OpenSecondUI()之前,UI已经启动并运行。

相关内容

  • 没有找到相关文章

最新更新