سؤال

فيما يلي كتلة رمز لمحاكاة مكابس المفاتيح في القائمة. يمكنني التنقل بعمق في قوائم طلبي ، لكن عندما أعود إلى النموذج الرئيسي ، أحصل على خطأ في الفصل .... :(

أولا أعرض طلبي:

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 () ، على سبيل المثال إذا لم تقبل عنصر واجهة مستخدم في تلك النافذة الأحداث الرئيسية.

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