qt - 帮助理解 QTest 教程

标签 qt qtestlib moc

在 QTestLib 教程中,引用了文件“testgui.moc”和“testqstring.moc”(可以在此处找到一个示例:http://www.englishbreakfastnetwork.org/coverage/build/qt-copy/examples/qtestlib/tutorial3/.moc/debug-shared/testgui.moc)。其中包括配置测试所需的几条信息。不幸的是,教程没有解释这些信息是什么或如何更改它。具体来说,我指的是这些行:

static const uint qt_meta_data_TestQString[] = {

 // content:
       2,       // revision
       0,       // classname
       0,    0, // classinfo
       2,   12, // methods
       0,    0, // properties
       0,    0, // enums/sets
       0,    0, // constructors

 // slots: signature, parameters, type, tag, flags
      13,   12,   12,   12, 0x08,
      28,   12,   12,   12, 0x08,

       0        // eod
};

static const char qt_meta_stringdata_TestQString[] = {
    "TestQString\0\0toUpper_data()\0toUpper()\0"
};

现在,根据我对 QT 的理解,qt_meta_stringdata_TestQString 变量是带有附加方法名称的类引用——这可以通过某些行 METHOD(toUpper()) 来完成,但我不确定这是否以及如何与结果格式以外的其他内容相关。

我想知道总体上发生了什么。文件顶部提供的注释表示它与“元对象代码”有关,并且根据它后来覆盖的方法,这一点似乎很明显。

然而,更重要的是,我想知道如何修改 qt_meta_data 数组,以便它允许我调用更多函数和/或允许我将上面的函数重命名为不同长度的名称(切换方法名称从 toUpper 更改为 toApple 似乎不会造成问题,但将它们更改为 toUppercase 或 toUp 都会导致测试应用程序无法按预期运行。

******************************** 更新******************** **************

下面已经有一个可接受的答案,但我想我应该添加这一点:这些文件出现在教程中的唯一原因是因为教程作者决定不为他们的类提供 .h 和 .cpp 文件。否则它们毫无用处。

最佳答案

您发布的代码是由Qt的meta object compiler (moc)生成的从你的头文件中。您不应该自己编写/更改该文件。只需编写您的类头并在其上运行 moc (这通常由您使用的构建系统处理,qmake 默认情况下会执行此操作)。

关于qt - 帮助理解 QTest 教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892899/

相关文章:

c++ - 在线程内启动 QProcess

c++ - Qt单元测试会在Qt Creator的“应用程序输出” Pane 中为Qt 4.8重复所有操作两次(但在Qt 5.2.2中不会)

c++ - Qt moc 在头文件中实现?

c++ - moc 文件中缺少信号槽

c++ - 为什么即使在 symbian 设备中单击 QTextEedit 也无法获得焦点

c++ - 编译cuda文件报错: "runtime library" mismatch value 'MDd_DynamicDebug' doesn't match value 'MTd_StaticDebug' in vectorAddition_cuda. o

qt - Golang与Qt在paintEvent中的绘画问题

c++ - 是否可以在qt单元测试中以单独的方法设置测试数据?

c++ - QTest异步信号拦截

c++ - CMake AutoMOC 生成有错误的 .cpp