Qt: falha de segmentação de teste de unidade
-
27-09-2019 - |
Pergunta
Abaixo está um bloco de código para simular pressionamentos de teclas em um menu. Eu posso navegar profundamente nos menus da minha aplicação, mas quando volto para a forma principal, estou recebendo um erro de segmetação .... :(
Primeiro eu mostro meu aplicativo:
std::auto_ptr<MyForm> mainForm( new MyForm( 3, 3 ));
mainForm->show();
Em seguida, simule um KeyPress para mostrar o 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"));
Em seguida, simule outra KeyPress para voltar ao meu aplicativo principal:
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"));
É aqui que estou recebendo a falha de segmentação ... Alguém pode me dizer o que está causando esse erro?
Solução
Comece com a verificação do resultado de QApplication::activeWindow()
. Dos documentos ..
Retorna a janela de nível superior do aplicativo que possui o foco de entrada do teclado ou 0 se nenhuma janela do aplicativo tiver o foco. Pode haver um ActiveWindow (), mesmo que não haja focowidget (), por exemplo, se nenhum widget nessa janela aceitar eventos principais.