2

在 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 to toApple 似乎没有问题,但是将它们更改为 toUppercase 或 toUp 都会导致测试应用程序无法按预期运行)。

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

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

4

1 回答 1

4

您发布的代码是由 Qt 的元对象编译器 (moc)从您的头文件生成的。您不应该自己编写/更改文件。只需编写您的类头并moc在其上运行(通常由您使用的构建系统处理,qmake默认情况下会这样做)。

于 2009-12-12T09:59:59.497 回答