我现在正在编程Java一段时间......现在我进入了C ++和Qt我对GUI Thread(EDT Thread)和Worker Thread有点迷茫 我试图只在配置窗口关闭时打开我的应用程序的主窗口。 我不想在我的配置窗口的OK按钮中放置用于创建主窗口的代码。 我试着让它们模态但主窗口仍然打开..... Afther配置完成后我仍然需要查看是否有应用程序更新...所以它的类似
编辑:这是我的主要内容:ConfigurationWindow *cw = new ConfigurationWindow();
//if there is no text file - configuration
cw->show();
//**I need to stop here until user fills the configuration
MainWindow *mw = new MainWindow();
ApplicationUpdateThread *t = new ApplicationUpdateThread();
//connect app update thread with main window and starts it
mw->show();
答案 0 :(得分:3)
尝试这样的事情:
#include <QtGui>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDialog *dialog = new QDialog;
QSlider *slider = new QSlider(dialog);
QHBoxLayout *layout = new QHBoxLayout(dialog);
layout->addWidget(slider);
dialog->setLayout(layout);
dialog->exec();
qDebug() << slider->value(); // prints the slider's value when dialog is closed
QMainWindow mw; // in your version this could be MainWindow mw(slider->value());
w.show();
return a.exec();
}
这个想法是你的主窗口的构造函数可以接受来自QDialog的参数。在这个人为的例子中,我只是使用qDebug()在QDialog关闭时打印滑块的值,而不是将其作为参数传递,但是你明白了。
编辑:您可能还想在创建主窗口之前“删除”对话框以节省内存。在这种情况下,您需要在删除对话框之前将主窗口构造函数的参数存储为单独的变量。
答案 1 :(得分:3)
您必须了解signals and slots。基本思想是在配置完成后发送信号。您将QMainWindow放在一个成员变量中,并在主程序的与configFinished信号连接的插槽中调用mw-&gt; show()。
答案 2 :(得分:1)
如果你的ConfigurationWindow是QDialog,你可以将finished(int)信号连接到MainWindow的show()插槽(并省略main的show()调用)。