Monitorar/Saída de sinais Qt emitidos
-
21-12-2019 - |
Pergunta
Defini alguns sinais que são emitidos em diferentes ocasiões:
signals:
void buttonXClicked(int x);
void numButtonsChanged(int num);
Agora gostaria apenas de ver como são esses sinais e se os parâmetros estão corretos.Parece que existem várias abordagens para monitorar os sinais.
No publicar aqui rohanpm refere-se ao parâmetro -vs
que é especificado mais de perto aqui:http://qt-project.org/doc/qt-4.8/qtestlib-manual.html#qtestlib-command-line-arguments
Esta parece ser uma maneira elegante e rápida de obter as informações de que preciso.Mas, para ser sincero, não consigo entender como e para onde devo correr -vs
.Não faz parte qmake
.Onde mais devo colocá-lo?(Sou muito novo no qt).
Relacionado ao QSignalSpy parece ser necessário alterar as classes existentes?Não existe também uma abordagem “externa”?
Há muita documentação sobre como testar um slot - mas relacionada a sinais?Eu poderia usar um printf
ou cout
em algum lugar?
Solução
Tive essa ideia enquanto lia mais sobre o moc e sua funcionalidade.(Pelo menos enquanto uso o NetBeans) recebo adicional ao meu arquivo ButtonTest.cpp o arquivo moc_ButtonTest.cpp.Dentro está um método chamado:
// SIGNAL 0
void ButtonTest::buttonXClicked(int _t1)
{
void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}
Eu mal podia acreditar que era tão fácil, mas acabei de adicionar um
std::cout <<"buttonXClicked: "<<_t1;
e parece fazer exatamente o que eu quero.
Outras dicas
Como escreve a documentação vinculada:
Executa a função de teste toUpper com todos os dados de teste disponíveis e a função de teste toInt com os dados de teste chamados zero (se os dados de teste especificados não existirem, o teste associado falhará).
/myTestDirectory$ testMyWidget -vs -eventdelay 500
onde testMyWidget é o binário de teste construído.Aqui vai o -vs
documentação:
-vs produz cada sinal que é emitido
Há também mais documentação se você usar a saída de ajuda:
/myTestDirectory$ testMyWidget --help | grep "\-vs"
-vs outputs every signal that gets emitted
Se acontecer de você ter problemas para escrever QTestLib
baseados em testes de unidade, este é um bom ponto de partida para você com o Qt 4: