Ausgegebene Qt-Signale überwachen/ausgeben
-
21-12-2019 - |
Frage
Ich habe einige Signale definiert, die bei verschiedenen Gelegenheiten ausgesendet werden:
signals:
void buttonXClicked(int x);
void numButtonsChanged(int num);
Jetzt möchte ich nur noch sehen, wie diese Signale aussehen und ob die Parameter korrekt sind.Es scheint, dass es mehrere Ansätze gibt, um die Signale zu überwachen.
In der Post hier bezieht sich rohanpm auf den Parameter -vs
was hier näher angegeben ist:http://qt-project.org/doc/qt-4.8/qtestlib-manual.html#qtestlib-command-line-arguments
Dies scheint eine elegante und schnelle Möglichkeit zu sein, die von mir benötigten Informationen zu erhalten.Aber um ehrlich zu sein, kann ich nicht verstehen, wie und wohin ich rennen muss -vs
.Es ist nicht Teil von qmake
.Wo soll ich es sonst hinstellen?(Ich bin ziemlich neu in qt).
Bezogen auf die QSignalSpy es scheint notwendig zu sein, die bestehenden Klassen zu ändern?Gibt es nicht auch einen "externen" Ansatz?
Es gibt viele Dokumentationen zum Testen eines Slots - aber in Bezug auf Signale?Könnte ich einen benutzen printf
oder cout
irgendwo?
Lösung
Ich bin auf diese Idee gekommen, als ich mehr über das Moc und seine Funktionalität gelesen habe.(Zumindest bei der Verwendung von NetBeans) bekomme ich zusätzlich zu meinem Datei-ButtonTest.cpp die Datei moc_ButtonTest.kpp.Im Inneren befindet sich eine Methode namens:
// SIGNAL 0
void ButtonTest::buttonXClicked(int _t1)
{
void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}
Ich konnte kaum glauben, dass es so einfach war, aber ich habe gerade eine hinzugefügt
std::cout <<"buttonXClicked: "<<_t1;
und es scheint genau das zu tun, was ich will.
Andere Tipps
Wie die verlinkte Dokumentation schreibt:
Führt die ToUpper-Testfunktion mit allen verfügbaren Testdaten und die toInt-Testfunktion mit den Testdaten null aus (wenn die angegebenen Testdaten nicht vorhanden sind, schlägt der zugehörige Test fehl).
/myTestDirectory$ testMyWidget -vs -eventdelay 500
wobei testMyWidget die erstellte Testbinärdatei ist.Hier geht der -vs
Dokumentation:
-vs gibt jedes Signal aus, das ausgesendet wird
Es gibt auch eine weitere Dokumentation, wenn Sie die Hilfeausgabe aufrufen:
/myTestDirectory$ testMyWidget --help | grep "\-vs"
-vs outputs every signal that gets emitted
Wenn Sie Probleme mit dem Schreiben haben QTestLib
basierend auf Komponententests ist dies ein guter Ausgangspunkt für Sie mit Qt 4: