문제

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 기본적으로 수행합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top