Вопрос

В руководствах по 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 является ссылкой на класс с добавленными именами методов - что-то, что может быть сделано через something line METHOD(toUpper()), но я не уверен, имеет ли это отношение к чему-либо другому, кроме форматирования результата, и насколько это важно.

Я хотел бы знать, в общих чертах, что происходит.В комментарии, приведенном в верхней части файлов, говорится, что это имеет отношение к "Мета-объектному коду", и это многое кажется очевидным, основываясь на методах, которые он позже переопределяет.

Что еще более важно, однако, я хочу знать, как я могу изменить этот массив qt_meta_data, чтобы он позволял мне вызывать больше функций и / или переименовывать функции, приведенные выше, в имена разной длины (переключение имен методов с ToUpper на toApple, похоже, не вызывает проблем, но изменение их на toUpperCase или ToUp оба приводят к сбою запуска тестового приложения должным образом).

***************************** ОБНОВЛЕНИЕ ********************************

Ниже уже есть принятый ответ, но я подумал, что должен добавить это:Единственная причина, по которой эти файлы вообще были в руководствах, заключалась в том, что авторы руководства решили НЕ использовать файлы .h и .cpp для своих классов.В остальном они бесполезны.

Это было полезно?

Решение

Опубликованный вами код сгенерирован с помощью Qt компилятор метаобъектов (moc) из вашего заголовочного файла.Вы не должны записывать / изменять файл самостоятельно.Просто напишите заголовок вашего класса и запустите moc на нем (который обычно обрабатывается используемой вами системой сборки, qmake будет делать это по умолчанию).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top