本页内容

QAbstractItemModelTester Class

QAbstractItemModelTester 类有助于测试QAbstractItemModel 的子类。更多内容...

头文件: #include <QAbstractItemModelTester>
CMake: find_package(Qt6 REQUIRED COMPONENTS Test)
target_link_libraries(mytarget PRIVATE Qt6::Test)
qmake: QT += testlib
继承自: QObject

公共类型

enum class FailureReportingMode { QtTest, Warning, Fatal }

公共函数

QAbstractItemModelTester(QAbstractItemModel *model, QObject *parent = nullptr)
QAbstractItemModelTester(QAbstractItemModel *model, QAbstractItemModelTester::FailureReportingMode mode, QObject *parent = nullptr)
QAbstractItemModelTester::FailureReportingMode failureReportingMode() const
QAbstractItemModel *model() const
(since 6.4) void setUseFetchMore(bool value)

详细描述

QAbstractItemModelTester 类是一个用于测试项目模型的辅助类。

在实现项目模型(即具体的 `QAbstractItemModel ` 子类)时,必须遵守一套非常严格的规则,以确保模型用户(视图、代理模型等)的一致性。

例如,对于给定的索引,模型对 `hasChildren()` 的重写必须与 `rowCount()` 和 `columnCount()` 返回的值保持一致。

QAbstractItemModelTester 有助于捕获自定义项模型类中最常见的错误。通过执行一系列测试,它将尝试验证模型状态在任何时候都保持一致。每次修改模型时,这些测试都会自动重复执行。

QAbstractItemModelTester 采用非破坏性测试,通常包括从给定的项模型中读取数据和元数据。QAbstractItemModelTester 还会尝试对模型进行非法修改。在正确实现的模型中,此类尝试应被拒绝,且不会因此导致任何数据发生改变。

用法

使用 QAbstractItemModelTester 非常简单。在测试用例中,只需创建一个实例,并将需要测试的模型传递给构造函数即可:

MyModel *modelToBeTested = ...;
auto tester = new QAbstractItemModelTester(modelToBeTested);

QAbstractItemModelTester 将通过Qt Test 的日志机制报告测试失败情况。

此外,也可以在测试用例之外使用 QAbstractItemModelTester。例如,当需要测试应用程序所使用的项模型时,无需为此模型专门编写单元测试(这可能颇具挑战性),使用该类便十分实用。 若要在测试用例之外使用 QAbstractItemModelTester,请向其构造函数传递一个QAbstractItemModelTester::FailureReportingMode 枚举值,以此指定应如何记录失败信息。

QAbstractItemModelTester 还可能将额外的调试信息作为日志消息记录在 `qt.modeltest ` 日志类别下。此类调试日志默认处于禁用状态;请参阅QLoggingCategory 文档以了解如何启用它。

注意:虽然 QAbstractItemModelTester 对于自定义项模型的开发和测试确实很有帮助,但它无法(也不可能)捕获QAbstractItemModel 子类中所有可能出现的问题。特别需要注意的是,它绝不会对模型进行有意义的破坏性测试,因此必须单独测试模型。

另请参阅 《模型/视图编程》和《QAbstractItemModel 》。

成员类型文档

enum class QAbstractItemModelTester::FailureReportingMode

此枚举指定了QAbstractItemModelTester 在测试QAbstractItemModel 子类时,应如何报告失败。

常量值描述
QAbstractItemModelTester::FailureReportingMode::QtTest0这些失败将作为QtTest 测试失败进行报告。
QAbstractItemModelTester::FailureReportingMode::Warning1失败将作为“qt.modeltest ”日志类别的警告消息报告。
QAbstractItemModelTester::FailureReportingMode::Fatal2失败将导致程序立即异常终止。失败原因将通过qFatal() 进行报告。

成员函数文档

QAbstractItemModelTester::QAbstractItemModelTester(QAbstractItemModel *model, QObject *parent = nullptr)

创建一个模型测试器实例,使用给定的parent ,用于测试模型model 。

故障报告模式设置为FailureReportingMode::QtTest 。

QAbstractItemModelTester::QAbstractItemModelTester(QAbstractItemModel *model, QAbstractItemModelTester::FailureReportingMode mode, QObject *parent = nullptr)

创建一个模型测试器实例,使用给定的parent ,该实例将测试模型model ,并使用指定的mode 来报告测试失败。

另请参阅 QAbstractItemModelTester::FailureReportingMode 。

QAbstractItemModelTester::FailureReportingMode QAbstractItemModelTester::failureReportingMode() const

返回此实例化所使用的测试失败报告模式。

另请参阅 QAbstractItemModelTester::FailureReportingMode 。

QAbstractItemModel *QAbstractItemModelTester::model() const

返回该实例正在测试的模型。

[since 6.4] void QAbstractItemModelTester::setUseFetchMore(bool value)

如果value 为true,则启用被测模型的动态填充,这是默认行为。如果value 为false,则禁用此功能。

该函数于 Qt 6.4 版本中引入。

另请参阅 QAbstractItemModel::fetchMore()。

© 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.