質問
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
デフォルトで実行されます)。