我正在制作一个测试程序,其中MainWindow用作登录屏幕。用户输入用户名和密码。如果它们与分配给字符串的内容匹配,则会显示对话框。如果失败,则会显示QMessageBox。
我的问题是,当我希望对话框出现(主程序)时,我希望“登录”页面消失。命令close();只会关闭所有内容。
这是MainWindow.cpp的代码(对话框在标题中作为名为mDialog的POINTER引用)

 void MainWindow::on_pushButton_clicked()
 {
 if (ui->lineEdit->text() == username)
 {
    if (ui->lineEdit_2->text() == password)
    {
        //This is where the Dialog appears
        mDialog= new MyDialog(this);
        mDialog->show();
    }
}
else if (ui->lineEdit->text() != username || ui->lineEdit->text() ==NULL)
{
    if (ui->lineEdit_2->text() != password || ui->lineEdit_2->text() == NULL)
    {
        QMessageBox::warning(this, "Error", "The username or password is incorrect.");
    }
 }
}
这是main.cpp的代码
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

最佳答案

在Qt中,如果parent被销毁,那么children也将被销毁,因此,如果将此参数作为MyDialog的参数,它将被销毁。使它不被破坏不通过父级。

mDialog= new MyDialog(this)更改为mDialog= new MyDialog(),并将close()放在show()之后。

该函数将如下所示:

...
mDialog= new QDialog();
mDialog->show();
close();
...

关于c++ - 出现对话框时如何关闭主窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41582361/

10-09 06:39
查看更多