كيو تي: خطأ تجزئة الوحدة
-
27-09-2019 - |
سؤال
فيما يلي كتلة رمز لمحاكاة مكابس المفاتيح في القائمة. يمكنني التنقل بعمق في قوائم طلبي ، لكن عندما أعود إلى النموذج الرئيسي ، أحصل على خطأ في الفصل .... :(
أولا أعرض طلبي:
std::auto_ptr<MyForm> mainForm( new MyForm( 3, 3 ));
mainForm->show();
ثم محاكاة مفاتيح لإظهار القائمة الرئيسية:
QTest::keyPress(mainForm.get(), Qt::Key_0, NULL, 300);
QTest::keyRelease(mainForm.get(), Qt::Key_0, NULL, 300);
QWidget *pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MainMenu"));
ثم محاكاة مفاتيح أخرى للعودة إلى طلبي الرئيسي:
QTest::keyPress(pWin, Qt::Key_Escape, NULL, 300);
QTest::keyRelease(pWin, Qt::Key_Escape, NULL, 300);
pWin = QApplication::activeWindow();
QCOMPARE(QString(pWin->objectName()), QString("MainForm"));
هذا هو المكان الذي أحصل فيه على خطأ التجزئة ... هل يمكن لأي شخص أن يخبرني ما الذي يسبب هذا الخطأ؟
المحلول
ابدأ بالتحقق من نتيجة QApplication::activeWindow()
. من المستندات ..
إرجاع نافذة المستوى الأعلى للتطبيق التي تحتوي على تركيز إدخال لوحة المفاتيح ، أو 0 إذا لم يكن له نافذة تطبيق التركيز. قد يكون هناك ActiveWindow () حتى لو لم يكن هناك FocusWidget () ، على سبيل المثال إذا لم تقبل عنصر واجهة مستخدم في تلك النافذة الأحداث الرئيسية.
لا تنتمي إلى StackOverflow