繁体   English   中英

出现对话框时如何关闭主窗口

[英]How to close the main window when a dialog appears

我正在制作一个测试程序,其中 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也会被销毁,因此如果您将 this 作为MyDialog的参数,它将被销毁。 这样它就不会被破坏,不要通过父级。

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

该函数将如下所示:

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

我认为您应该将对话框显示为登录名,将主窗口显示为主程序。 如果登录成功,则显示主窗口,而不是相反。 关闭主窗口将关闭程序。

我已经完成了你想要做的事情。 您可以按照我上面所说的进行操作,或者另一种选择是使用 QLabel 在主窗口中创建一个登录屏幕。 您可以将图像添加到 Qlabel(纯色图像或任何您喜欢的图像)并使其与窗口大小相同以阻止主程序的查看。 然后你可以添加你的行编辑和按钮或任何你想要的。 如果登录成功,可以关闭图像、标签和按钮以显示主程序。 我使用正则表达式检查输入。

使用this->close()关闭当前窗口,但是在 MyDialog 的构造函数中,不要向构造函数传递任何东西。 默认情况下,构造函数会将 0 传递给 parent 参数,因此,对话框将没有父级。

如果您的主程序是对话框,您可以在显示之前打开带有用户名/密码字段的登录对话框。

main函数的伪代码(LoginDialog和MainDialog继承了QDialog):

QApplication a(argc, argv);
LoginDialog lDialog;
lDialog.exec(); // Modal dialog behavior. Stopped at this line while it not closed (QDialog::close())
if (lDialog.getUsername() != username || lDialog.getPassword() != password)
{
  return 0;
}
MainDialog mDialog;
mDialog.show();
return a.exec();

您可以将窗口可见性设置为 false。

mainwindow.setVisible(false)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM