隐藏 qdialog 并显示主窗口
Posted
技术标签:
【中文标题】隐藏 qdialog 并显示主窗口【英文标题】:hide qdialog and show mainwindow 【发布时间】:2012-08-29 14:45: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,如果它被隐藏,那么主窗口应该会显示出来,对吧?
这是我使用的 SLOT:
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
【问题讨论】:
【参考方案1】:所以这里的问题是调用 dialog->show() 不会阻塞执行。在进行调用的那一刻,它会转到下一个方法。您需要阻止执行,直到用户完成输入。
让你的主变成这样:
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
【讨论】:
【参考方案2】:当您按下按钮时,您会拨打您的Dialog::startplanevolume
,是的,仅此而已。你不会回到主循环。
如果您想显示您的mainwindow
,您可能需要在Dialog::startplanevolume
中调用planevolume.show()
,紧跟在hide
之后。
但是,如果您的对象位于不同的文件中,这可能会很棘手。所以也许你可以定义一个像DialogChecked
这样的信号,在你的Dialog::startplanevolume
中发出这个信号(当然是在hide
之后......),然后修改你的main
以便它在接收时调用mainwindow.setVisible(1)
DialogChecked
。
【讨论】:
【参考方案3】:PushButton
操作只能在调用app.exec()
之后发生。在进入主循环之前测试对话框属性是没有意义的。
可以通过将组件设置为以异步方式顺序启动来达到预期的行为。在 Qt 世界中,这意味着使用信号和插槽。
connect(dialog, SIGNAL(accept()), &mainwindow, SLOT(show()));
【讨论】:
以上是关于隐藏 qdialog 并显示主窗口的主要内容,如果未能解决你的问题,请参考以下文章
PyQt - 隐藏 MainWindow 并显示 QDialog 而不会消失任务栏图标
在 QDialog 中创建线程并在 Qt 中向 QDialog 发出信号