Capítulo 3: Simulación de eventos GUI
Qt Test presenta algunos mecanismos para probar interfaces gráficas de usuario. En lugar de simular eventos nativos del sistema de ventanas, Qt Test envía eventos internos de Qt. Esto significa que no hay efectos secundarios en la máquina en la que se ejecutan las pruebas.
Este capítulo muestra cómo escribir una sencilla prueba de GUI.
Escribiendo un test GUI
Esta vez, vamos a suponer que quieres probar el comportamiento de nuestra clase QLineEdit. Como antes, necesitarás una clase que contenga tu función de prueba:
#include <QtWidgets> #include <QTest> class TestGui: public QObject { Q_OBJECT private slots: void testGui(); };
La única diferencia es que necesita incluir las definiciones de la clase Qt GUI además del espacio de nombres QTest.
void TestGui::testGui() { QLineEdit lineEdit; QTest::keyClicks(&lineEdit, "hello world"); QCOMPARE(lineEdit.text(), QString("hello world")); }
En la implementación de la función de prueba, primero creamos un QLineEdit. Luego, simulamos escribir "hola mundo" en la línea de edición utilizando la función QTest::keyClicks().
Nota: El widget también debe mostrarse para poder probar correctamente los atajos de teclado.
QTest::keyClicks() simula la pulsación de una secuencia de teclas en un widget. Opcionalmente, se puede especificar un modificador de teclado, así como un retardo (en milisegundos) de la prueba tras cada pulsación de tecla. De forma similar, se pueden utilizar las funciones QTest::keyClick(), QTest::keyPress(), QTest::keyRelease(), QTest::mouseClick(), QTest::mouseDClick(), QTest::mouseMove(), QTest::mousePress() y QTest::mouseRelease() para simular los eventos GUI asociados.
Por último, utilizamos la macro QCOMPARE() para comprobar si el texto de la edición de línea es el esperado.
Preparación del ejecutable independiente
Como antes, para hacer de nuestro caso de prueba un ejecutable autónomo, se necesitan las dos líneas siguientes:
QTEST_MAIN(TestGui)
#include "testgui.moc"La macro QTEST_MAIN() se expande a un simple método main() que ejecuta todas las funciones de prueba, y dado que tanto la declaración como la implementación de nuestra clase de prueba están en un archivo .cpp, también necesitamos incluir el archivo moc generado para que funcione la introspección de Qt.
Construir el ejecutable
Puedes construir el ejecutable del caso de prueba usando CMake o qmake.
Construir con CMake
Configura los parámetros de compilación en tu archivo CMakeLists.txt:
# 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})A continuación, desde la línea de comandos, ejecute cmake o utilice el script de conveniencia qt-cmake ubicado en Qt-prefix/<version>/<platform>/bin/qt-cmake:
<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja
A continuación, ejecute su herramienta generadora preferida para construir el ejecutable. Aquí, estamos usando Ninja:
ninja
Compilación con qmake
Configura los parámetros de compilación en tu archivo .pro:
QT += widgets testlib SOURCES = testgui.cpp # install target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial3 INSTALLS += target
A continuación, ejecuta qmake y, por último, ejecuta make para crear el ejecutable:
qmake make
Ejecutar el ejecutable
Si ejecutas el ejecutable resultante, obtendrás el siguiente resultado:
© 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.