隐藏了QDialog并显示主窗口(hide qdialog and show mainwindow)

2019-11-01 02:11发布

我有一个QDialog的中,我得到一些投入我的主窗口使用。 所以它必须看起来比主窗口第一位。

问题是,我的主窗口不显示。 这里是我的main.cpp

#include <QtGui/QApplication>

#include "planevolume.h"
#include "dialog.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    Dialog *dialog= new Dialog;
    dialog->show();

    planevolume mainwindow;

    bool dialogcheck = dialog->isHidden();

    if (dialogcheck==1)
    {
        mainwindow.show();
    }
    else
    {
    }

    return app.exec();
}

我有一个按钮按下时隐藏QDialog的,如果它是隐藏比主窗口应该出现了吧?

这是我所使用的插槽:

void Dialog::startplanevolume()
{
    if (xMax==0 || yMax==0 || zMax==0 || xMMax==0 || yMMax==0 || zMMax==0)
    {
        ui->label_17->setText("Error: Can't start, invalid measures");
    }
    else
    {
        hide();
    }
}

在主窗口只能启动按钮被按下,只有这样,以后我投入到主winodw

Answer 1:

因此,这里的问题是,调用对话框 - >展()不会阻止执行。 调用由的那一刻,它移动到下一个方法。 您需要直到用户完成输入将在阻断执行。

让你这样的主:

QApplication app(argc, argv);

Dialog *dialog= new Dialog;
if ( dialog->exec() ) {
    planevolume mainwindow;
    mainwindow.show();
    return app.exec();
}
return 0;

而在你的对话框类,让你的方法是这样的:

void Dialog::startplanevolume() 
{
    if (xMax==0 || yMax==0 || zMax==0 || xMMax==0 || yMMax==0 || zMMax==0) 
    {
        ui->label_17->setText("Error: Can't start, invalid measures");
    }
    else 
    {
        this->accept();  // close the dialog with a result of 1
    }
}


Answer 2:

当你按下按钮,你打电话给你的Dialog::startplanevolume ,是的,但仅此而已。 你不回去的主循环。

如果你想显示你的mainwindow ,您可能需要调用一个planevolume.show()在你的Dialog::startplanevolume ,只是后hide

如果你的对象是在不同的文件可能会非常棘手,但。 因此,也许你可以定义等的信号DialogChecked ,发出你的这个信号Dialog::startplanevolume (后hide ,当然...),并修改您的main ,这样它会调用mainwindow.setVisible(1)接收时DialogChecked



Answer 3:

PushButton操作可能只发生后app.exec()被调用。 这是没有意义进入主循环之前测试对话框属性。

预期的行为可以通过设置组件异步的方式开始按顺序到达。 在Qt世界中,这意味着使用的信号和槽。

connect(dialog, SIGNAL(accept()), &mainwindow, SLOT(show()));


文章来源: hide qdialog and show mainwindow