Qt官方示例-重播GUI事件

2020-05-08 16:08:55 浏览数 (1)

❝本示例是一个测试工程示例。介绍如何模拟GUI事件,以及如何储存一系列GUI事件并在某个小部件(QWidget)上重播它们。 ❞

  1. 将数据函数添加到测试类中:
代码语言:javascript复制
class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui_data();
    void testGui();
};
  1. 编写数据功能 测试功能的关联数据功能带有相同的名称,后跟_data
代码语言:javascript复制
void TestGui::testGui_data()
{
    QTest::addColumn<QTestEventList>("events");
    QTest::addColumn<QString>("expected");

    QTestEventList list1;
    list1.addKeyClick('a');
    QTest::newRow("char") << list1 << "a";

    QTestEventList list2;
    list2.addKeyClick('a');
    list2.addKeyClick(Qt::Key_Backspace);
    QTest::newRow("there and back again") << list2 << "";
}

  首先,我们使用QTest::addColumn()函数定义表的元素:GUI事件列表,以及在QWidget上应用事件列表的预期结果。注意,第一个元素的类型是QTestEventList。

  QTestEventList可以用可被存储作为测试数据供以后使用,或在任意的重放GUI事件来填充QWidget的。

  在当前的数据函数中,我们创建两个QTestEventList元素。第一个列表由单击"a"键组成。我们使用QTestEventList :: addKeyClick()函数将事件添加到列表中。然后,我们使用QTest::newRow()函数为数据集命名,并将事件列表和预期结果流式传输到表中。

  第二个列表包含两次按键单击:一个带有后面的"退格键"的"a"。再次,我们使用QTestEventList::addKeyClick()将事件添加到列表中,并使用QTest::newRow()将事件列表和预期结果放入具有关联名称的表中。

  1. 重写测试功能 现在可以重写我们的测试:
代码语言:javascript复制
void TestGui::testGui()
{
    QFETCH(QTestEventList, events);
    QFETCH(QString, expected);

    QLineEdit lineEdit;

    events.simulate(&lineEdit);

    QCOMPARE(lineEdit.text(), expected);
}

TestGui::testGui()函数将执行两次,一次是针对在关联的TestGui::testGui_data()函数中创建的测试数据中的每个条目。

  首先,我们使用QFETCH宏获取数据集的两个元素。QFETCH具有两个参数:元素的数据类型和元素名称。然后,我们创建一个QLineEdit,并使用QTestEventList::simulate()函数在该小部件上应用事件列表。

  最后,我们使用QCOMPARE宏来检查行编辑的文本是否符合预期。

  要使我们的测试用例成为独立的可执行文件,需要执行以下两行:

代码语言:javascript复制
QTEST_MAIN(TestGui)
#include "testgui.moc"

  该QTEST_MAIN运行所有测试功能,并且因为两者的声明和我们的测试类的实现是在一个.cpp文件宏展开为一个简单的main函数,我们还需要包括生成的moc文件,以使Qt的自省工作。

关于更多

  • 「QtCreator软件」可以找到:
  • 或在以下「Qt安装目录」找到:
代码语言:javascript复制
C:Qt{你的Qt版本}Examples{你的Qt版本}qtestlibtutorial4
  • 「相关链接」
代码语言:javascript复制
https://doc.qt.io/qt-5/qttestlib-tutorial4-example.html

0 人点赞