帮助理解QTest教程

时间:2009-12-12 09:41:31

标签: 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文件。否则他们就没用了。

1 个答案:

答案 0 :(得分:4)

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