Kapitel 3: Simulation von GUI-Ereignissen
Qt Test beschreibt einige Mechanismen zum Testen grafischer Benutzeroberflächen. Anstatt native Fenstersystemereignisse zu simulieren, sendet „ Qt Test “ interne Qt-Ereignisse. Das bedeutet, dass es keine Nebenwirkungen auf dem Rechner gibt, auf dem die Tests ausgeführt werden.
In diesem Kapitel wird gezeigt, wie man einen einfachen GUI-Test schreibt.
Einen GUI-Test schreiben
Nehmen wir diesmal an, Sie möchten das Verhalten unserer Klasse ` QLineEdit ` testen. Wie zuvor benötigen Sie eine Klasse, die Ihre Testfunktion enthält:
#include <QtWidgets>
#include <QTest>
class TestGui: public QObject
{
Q_OBJECT
private slots:
void testGui();
};Der einzige Unterschied besteht darin, dass Sie zusätzlich zum Namespace „ QTest “ auch die Klassendefinitionen von „ Qt GUI “ einbinden müssen.
void TestGui::testGui()
{
QLineEdit lineEdit;
QTest::keyClicks(&lineEdit, "hello world");
QCOMPARE(lineEdit.text(), QString("hello world"));
}In der Implementierung der Testfunktion erstellen wir zunächst ein ` QLineEdit`. Anschließend simulieren wir mithilfe der Funktion ` QTest::keyClicks()` die Eingabe von „hello world“ in das Eingabefeld.
Hinweis: Das Widget muss ebenfalls angezeigt werden, damit Tastaturkürzel korrekt getestet werden können.
QTest::keyClicks() simuliert das Drücken einer Tastenfolge auf einem Widget. Optional können ein Tastaturmodifikator sowie eine Verzögerung (in Millisekunden) des Tests nach jedem Tastendruck angegeben werden. Auf ähnliche Weise können Sie die Funktionen ` QTest::keyClick()`, ` QTest::keyPress()`, ` QTest::keyRelease()`, ` QTest::mouseClick()`, ` QTest::mouseDClick()`, ` QTest::mouseMove()`, ` QTest::mousePress()` und ` QTest::mouseRelease()` verwenden, um die entsprechenden GUI-Ereignisse zu simulieren.
Schließlich verwenden wir das Makro „ QCOMPARE()“, um zu überprüfen, ob der Text im Zeileneingabefeld den Erwartungen entspricht.
Vorbereitung der eigenständigen ausführbaren Datei
Wie zuvor sind die folgenden zwei Zeilen erforderlich, um unseren Testfall als eigenständige ausführbare Datei zu erstellen:
QTEST_MAIN(TestGui)
#include "testgui.moc"Das Makro „ QTEST_MAIN()“ wird zu einer einfachen „main()“-Methode erweitert, die alle Testfunktionen ausführt. Da sich sowohl die Deklaration als auch die Implementierung unserer Testklasse in einer .cpp-Datei befinden, müssen wir außerdem die generierte moc-Datei einbinden, damit die Introspektion von Qt funktioniert.
Erstellen der ausführbaren Datei
Sie können die ausführbare Testdatei mit CMake oder qmake erstellen.
Erstellen mit CMake
Konfigurieren Sie Ihre Build-Einstellungen in Ihrer `CMakeLists.txt`-Datei:
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
project(tutorial3 LANGUAGES CXX)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets)
qt_standard_project_setup()
qt_add_executable(tutorial3
testgui.cpp
)
set_target_properties(tutorial3 PROPERTIES
WIN32_EXECUTABLE TRUE
MACOSX_BUNDLE TRUE
)
target_link_libraries(tutorial3 PRIVATE
Qt6::Core
Qt6::Gui
Qt6::Test
Qt6::Widgets
)
install(TARGETS tutorial3
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
qt_generate_deploy_app_script(
TARGET tutorial3
OUTPUT_SCRIPT deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})Führen Sie anschließend über die Befehlszeile entweder „ cmake “ aus oder verwenden Sie das Hilfsskript „ qt-cmake “, das sich unter „ Qt-prefix/<version>/<platform>/bin/qt-cmake “ befindet:
<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G NinjaFühren Sie anschließend Ihr bevorzugtes Generator-Tool aus, um die ausführbare Datei zu erstellen. Hier verwenden wir Ninja:
ninjaErstellen mit qmake
Konfigurieren Sie Ihre Build-Einstellungen in Ihrer Datei „ .pro “:
QT += widgets testlib
SOURCES = testgui.cpp
# install
target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial3
INSTALLS += targetFühren Sie anschließend „ qmake “ aus und schließlich „ make “, um Ihre ausführbare Datei zu erstellen:
qmake
makeAusführen der ausführbaren Datei
Wenn Sie die resultierende ausführbare Datei ausführen, sollten Sie die folgende Ausgabe erhalten:
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.