質問

C ++とQTでプロジェクトに取り組んでいます。新しいQWidgetウィンドウを開き、ユーザーに操作してもらい、その後、ウィンドウを開いたメソッドに実行を戻します。例(MyClassはQWidigetを継承します):

void doStuff(){

     MyClass newWindow = new Myclass();
     /* 
        I don't want the code down here to 
        execute until newWindow has been closed
      */
}

これを行うには非常に簡単な方法があると思いますが、何らかの理由でそれを理解できません。どうすればいいですか?

役に立ちましたか?

解決

MyClass QDialog を継承します。次に、 exec()を使用してモーダルダイアログとして開きます。

void MainWindow::createMyDialog()
{
  MyClass dialog(this);
  dialog.exec();
}

http://qt-project.org/doc/qt-をご覧ください4.8 / qdialog.html

他のヒント

別の方法は、終了イベントを待つループを使用することです:

#include <QEventLoop>

void doStuff()
{
    // Creating an instance of myClass
    MyClass myInstance;
    // (optional) myInstance.setAttribute(Qt::WA_DeleteOnClose);  
    myInstance.show();

    // This loop will wait for the window is destroyed
    QEventLoop loop;
    connect(this, SIGNAL(destroyed()), & loop, SLOT(quit()));
    loop.exec();
}

別の関数でウィンドウが閉じるまで実行したくないコードを入れないで、これをウィンドウのクローズ SIGNAL SLOT として接続する

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top