سؤال
وأنا أعمل على مشروع في 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();
}
نصائح أخرى
وهناك طريقة أخرى لاستخدام حلقة الذي ينتظر على الحدث الختامي:
#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
إغلاق النافذة؟
لا تنتمي إلى StackOverflow