2

QTestLib のチュートリアルでは、ファイル「testgui.moc」および「testqstring.moc」への参照があります (1 つの例はここにあります: 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 ファイルを持たないと決定したためです。それ以外の場合は役に立ちません。

4

1 に答える 1

4

投稿したコードは、ヘッダー ファイルからQt のメタ オブジェクト コンパイラ (moc)によって生成されます。ファイルを自分で書き込んだり変更したりしないでください。クラスヘッダーを作成して実行mocするだけです(通常、使用するビルドシステムによって処理され、qmakeデフォルトで処理されます)。

于 2009-12-12T09:59:59.497 に答える