سؤال

أحاول إنشاء نافذتين.يجب استدعاء الثاني في الأول.أنا لا أقوم بتوصيلهم بالطفل->الوالد.ولكن عندما اتصلت بالنافذة الثانية وأغلقتها، أغلقت النافذة الأولى أيضًا.ماذا علي أن أفعل؟كلا النافذتين موروثتان من QWidget.C++ و كيو تي


آسف لوصفي الفقراء.لدي نافذة رئيسيةفئة موروثة من QMainWindow.لقد قمت بإنشاء النافذة الثانية.فئة موروثة من QWidget.في النافذة الأولى (النافذة الرئيسية) أقوم بإنشاء النافذة الثانية والاتصال بها

ConfigWindow *ConfWindow = new ConfigWindow();
ConfWindow->show();

دون إعطاء رابط للوالدين.كل شيء يعمل بشكل جيد، ولكن عندما أقوم بإغلاق النافذة الثانية (نافذة التكوين) يتم إغلاق نافذتي الرئيسية أيضًا.لا أحتاج في هذا.ما الذي يجب علي فعله لمنع إغلاق النافذة الرئيسية بعد إغلاق نافذة التكوين.

وصف الأمل أفضل قليلا.

تحتوي نافذتي الأولى على هذه العلامات:

this->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);

بدونهم كل شيء على ما يرام.هل يمكنني تغيير شيء ما إذا كنت بحاجة إلى تلك الأعلام في نافذتي؟

هل كانت مفيدة؟

المحلول

وتحتاج إلى شيء من هذا القبيل:

QApplication app(argc, argv);
app.setQuitOnLastWindowClosed(false);

وهنا هو برنامج اختبار: http://pastebin.com/f5903c5f4

وحذار، الآن تحتاج إلى صراحة اتصال الإقلاع عن التدخين () في destructor من النافذة الرئيسية الخاصة بك.

إذا كنت تقرأ QApplication :: quitOnLastWindowClosed الوثائق ، وسوف تجد إلى أن:

<اقتباس فقرة>   

إذا هذه الخاصية هي حقيقية، والتطبيقات إنهاء عند آخر نافذة الأساسي مرئية (أي نافذة مع عدم وجود الوالدين) مع كيو تي :: WA_QuitOnClose مغلق السمة المحددة. افتراضيا يتم تعيين هذه السمة لجميع الحاجيات باستثناء ويندوز الفرعية

ولأن الإطار الرئيسي الخاص بك هو إطار (بدون إطار) أداة، فإنه لا تعول. أن يترك ConfWindow كما القطعة الوحيدة غير النوافذ دون أعلى مستوى. وهكذا، إذا قمت بإغلاق ConfWindow، فإنه يثير مثيل التطبيق على الإقلاع عن التدخين.

نصائح أخرى

إذا كان هذا هو الكود، فهذا يعني أن هناك خطأً كبيرًا في Qt.
لا ينبغي للكود أعلاه أن يغلق Windows الأول مطلقًا، فلا بد أن يكون هناك خطأ آخر.
هل تم إغلاق التطبيق أم أنه يتعطل؟

ملاحظة
من يقوم بحذف configWindow؟هناك Qt::WA_DeleteOnClose السمة التي تحذف النافذة بعد إغلاقها.

ConfigWindow *confWindow = new configWindow();
configWindow->setAttribute(Qt::WA_DeleteOnClose, true);
confWindow->show();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top