Помощь в понимании руководств по qTest
Вопрос
В руководствах по 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
будет делать это по умолчанию).