在Qt中我有两种形式说FirstUI和SecondUI。主要打开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详细信息,我有一个继承QObject的类(WifiBoot)并为我执行连接任务。由于我希望在GUI中播放GIF文件并且连接发生同时我已经实例化了进行wifi连接并将其移动到另一个线程的类(WifiBoot)。连接wifi后,我发出连接到插槽的完成信号,打开SecondUIconnect(worker,SIGNAL(finished()),this,SLOT(FinishedConnection()));
void FirstUI::FinishedConnection()
{
OpenSecondUI();
}
这里关闭FirstUI并打开SecondUI。但在第一种情况下却没有。为什么会这样?还有更好的方法吗? 任何帮助表示赞赏
答案 0 :(得分:0)
首先检查是否
this->close();
返回true。另一件事可能是使用
隐藏它QWidget::hide()
以及将FirstUI
设置为SecondUI
的父级,以便在您有多个FirstUI
实例时,您的应用程序不会泄漏内存。 (如果您仍然close()
小部件,请忘记父级内容)
欢呼声
答案 1 :(得分:0)
OpenSecondUI()在构造函数本身中被调用。因此,在UI启动并运行之前,OpenSecondUI()中的close()正在发生。为了解决这个问题,如QT论坛和@andrea.marangoni暗示构造函数太多,我使用单镜头计时器并将构造函数中的整个代码移动到一个插槽中并在一定延迟后调用插槽。这确保了在调用插槽OpenSecondUI()之前,UI已启动并运行。