QT: erreur de segmentation tests unitaires
-
27-09-2019 - |
Question
Ci-dessous un bloc de code pour simuler touches dans un menu. Je peux naviguer en profondeur dans les menus de ma candidature, mais quand je reviens à la forme principale, je reçois une erreur de segmetation ....: (
d'abord je montre ma demande:
std::auto_ptr<MyForm> mainForm( new MyForm( 3, 3 ));
mainForm->show();
simulent ensuite un keyPress pour afficher le menu principal:
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"));
Alors simuler un autre keyPress pour revenir à ma demande principale:
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"));
C'est là que je suis en train de la faute de segmentation ... Quelqu'un peut-il me dire ce qui cause cette erreur?
La solution
Commencez par vérifier le résultat de QApplication::activeWindow()
. A partir de la documentation ..
Retourne le haut niveau de l'application fenêtre qui a l'entrée du clavier mise au point, ou 0 si aucune fenêtre d'application a la mise au point. Il pourrait y avoir un ActiveWindow (), même s'il n'y a pas focusWidget (), par exemple si aucune widget dans cette fenêtre accepte la clé événements.