문제
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에 의해 생성됩니다 메타 객체 컴파일러 (MOC) 헤더 파일에서. 파일을 직접 작성/변경해서는 안됩니다. 클래스 헤더를 작성하고 실행하기 만하면됩니다 moc
그것 (일반적으로 사용하는 빌드 시스템에 의해 처리됩니다. qmake
기본적으로 수행합니다).