QT: segmentation fault unit test
-
27-09-2019 - |
Domanda
Di seguito è un blocco di codice per la simulazione di tasti premuti su un menu. Posso navigare in profondità nei menu della mia applicazione, ma quando torno alla maschera principale, sto ottenendo un errore di segmetation ....: (
primo mostro il mio Applicazione:
std::auto_ptr<MyForm> mainForm( new MyForm( 3, 3 ));
mainForm->show();
Poi simulare pressione di un tasto per visualizzare il menu principale:
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"));
Poi simulare un'altra keyPress di tornare al mio principale dell'applicazione:
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"));
Questo è dove sto ottenendo l'errore di segmentazione ... Qualcuno può dirmi che cosa sta causando questo errore?
Soluzione
Inizia con controllo il risultato della QApplication::activeWindow()
. Dalla documentazione ..
Restituisce il top a livello di applicazione finestra che ha l'input dalla tastiera messa a fuoco, o 0 se nessuna finestra dell'applicazione ha la messa a fuoco. Ci potrebbe essere un ActiveWindow (), anche se non v'è focusWidget (), per esempio se nessun penseremo in quella finestra accetta chiave eventi.