我有一个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
因此,这里的问题是,调用对话框 - >展()不会阻止执行。 调用由的那一刻,它移动到下一个方法。 您需要直到用户完成输入将在阻断执行。
让你这样的主:
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
}
}
当你按下按钮,你打电话给你的Dialog::startplanevolume
,是的,但仅此而已。 你不回去的主循环。
如果你想显示你的mainwindow
,您可能需要调用一个planevolume.show()
在你的Dialog::startplanevolume
,只是后hide
。
如果你的对象是在不同的文件可能会非常棘手,但。 因此,也许你可以定义等的信号DialogChecked
,发出你的这个信号Dialog::startplanevolume
(后hide
,当然...),并修改您的main
,这样它会调用mainwindow.setVisible(1)
接收时DialogChecked
。
在PushButton
操作可能只发生后app.exec()
被调用。 这是没有意义进入主循环之前测试对话框属性。
预期的行为可以通过设置组件异步的方式开始按顺序到达。 在Qt世界中,这意味着使用的信号和槽。
connect(dialog, SIGNAL(accept()), &mainwindow, SLOT(show()));