Diálogo modal de teste com Qt Test
Estou tentando escrever um teste de unidade para um aplicativo GUI usando o QTestLib. O problema é que um dos slots cria uma caixa de diálogo modal usandoexec()
e não encontrei a possibilidade de interagir com a caixa de diálog
Os slots que criam a caixa de diálogo estão conectados a um QAction. Portanto, o primeiro problema é que o teste é bloqueado quando eu aciono o QAction no teste, pois isso resulta na chamada paraexec()
. Portanto, tentei criar um QThread que executa a interação. No entanto, isso não ajudou.
oisas que eu já tentei (todas executadas no segmento "auxiliar de interação"):
Enviar cliques nas teclas usandoQTest::keyClicks()
Resultados na mensagem de erro "QCoreApplication :: sendEvent (): não é possível enviar eventos para objetos pertencentes a um segmento diferente"Post QKeyEvents usandoQCoreApplication::postEvent()
Não funciona, ou seja, nada acontece. Eu acho que porque os eventos acabam no loop de eventos do segmento que possui o diálogo, que não será alcançado até que o diálogo seja fechado eexec()
retorna. Veja a edição abaixoInvocar Slots na caixa de diálogo usandoQMetaObject::invokeMethod()
Não funciona, ou seja, nada acontece. Eu acho que pelo mesmo motivo quepostEvent()
não funciona. Veja a edição abaixoA pergunta é: existe alguma maneira de interagir programaticamente com uma caixa de diálogo modal que foi aberta usando oexec()
método?
Editar Na verdade, o método 3 está funcionando. O problema era diferente: passei os argumentos parainvokeMethod()
para o segmento "auxiliar de interação" e, por algum motivo, acessar os argumentos não funcionou nesse segmento (não obtive erros de SEG, mas eles estavam vazios). Acho que o método 2 também está funcionando e simplesmente tive o mesmo problema do método 3, mas não testei iss