3

Qt ライブラリを使用して C++ で記述された GUI があります。私のアプリケーションでは、TreeView オブジェクトを使用しました。このオブジェクトを簡単に再利用できるようにするために、QObjects が継承できるテンプレート化されたクラスを作成しました。moc はテンプレート化されたクラスでは動作しないため、次のようなクラスを作成しました。

class Tree : public QObject, public TreeTemplate<TreeType, TreeItemType>
{
     Q_OBJECT
};

これにより、テンプレートの利点を得ながら、Tree クラスのみが moc を使用できるようになります (TreeTemplate は QObject を継承せず、Q_OBJECT マクロを使用しません)。

私の問題は、アプリケーションを終了すると必ずクラッシュすることです (exit を呼び出して QApplication のクリーンアップをスキップしても)。「静的メタオブジェクト」を使用して、moc 用に生成されたクラスに問題がある可能性があると考えています。

処理できないため、valgrind を使用__ASM__できません。:-(

テンプレート化されたクラスから継承するテンプレート化された Qt クラス (+moc) を使用する私の設計がこの問題を引き起こすかどうかは誰にもわかりますか?

クラッシュは、終了後の libc.so にあります。

4

1 に答える 1

1

AFAIK、あなたのアプローチはうまくいきません。

mocC++ プリプロセッサの前に実行されるためQObject、テンプレート化されたクラスが機能しません。プリプロセッサはまだクラスを生成していません。クラスをテンプレート化しているため、クラスmocに関する のデータは、プリプロセッサ中にそこから作成されたテンプレート クラスのシグネチャと一致しません。

于 2012-05-08T12:38:07.747 に答える