0

私は今しばらくの間Javaのプログラミングに取り組んできました...C++とQtに取り掛かったので、GUIスレッド(EDTスレッド)とワーカースレッドについて少し迷っています。アプリケーションのメインウィンドウのみを開いてみようとしています。構成ウィンドウを閉じたとき。メインウィンドウを作成するためのコードを構成ウィンドウの[OK]ボタンに配置したくありません。それらをモーダルにしようとしましたが、メインウィンドウはまだ開いています.....その後の構成が完了しましたアプリケーションの更新があるかどうかを確認する必要があります...

編集:これは私のメインです:

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();
4

3 に答える 3

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が閉じたときにスライダーの値を出力し、パラメーターとして渡さないようにしていますが、要点はわかります。

編集:メモリを節約するために、メインウィンドウを作成する前にダイアログを「削除」することもできます。その場合、ダイアログを削除する前に、メインウィンドウコンストラクターのパラメーターを個別の変数として保存する必要があります。

于 2012-04-12T03:26:06.657 に答える
3

信号とスロットについて学ぶ必要があります。基本的な考え方は、構成が完了したときにシグナルを送信することです。QMainWindowをメンバー変数に入れ、configurationFinishedシグナルに接続されているメインプログラムのスロットでmw-> show()を呼び出します。

于 2012-04-12T08:41:27.720 に答える
1

ConfigurationWindowがQDialogの場合、finished(int)シグナルをMainWindowのshow()スロットに接続できます(メインからshow()呼び出しを省略できます)。

于 2012-04-12T09:16:39.853 に答える