سؤال

وأنا أعمل على مشروع في 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();
}

لماذا لا تضع الشفرة التي لا تريد ليتم تنفيذها حتى النافذة قد أغلقت في وظيفة منفصلة والاتصال في ذلك SLOT لSIGNAL إغلاق النافذة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top