1

Qt Creatorを使用して、Qtにカスタムスロットを持つクラスを作成しています。


class CustomEdit : public QTextEdit
{
    Q_OBJECT

public:
    CustomEdit(QWidget* parent);

public slots:
    void onTextChanged ();
};

ただし、次のリンカーエラーが発生します。

undefined reference to 'vtable for CustomEdit'

ドキュメントには次のように書かれています。

「LcdNumberのvtableへの未定義の参照」の行に沿ってコンパイラエラーが発生した場合は、mocを実行するか、moc出力をlinkコマンドに含めるのを忘れている可能性があります。

...しかし、それが何を意味するのかは明らかではありません。

クラスまたは.proファイルに追加する必要があるものはありますか?

編集-これが私の.proファイルです:

QT+=ネットワーク\
    脚本 \
    webkit \
    xml
TARGET = MyApp
テンプレート=アプリ
ソース+=main.cpp \
    MainWindow.cpp \
    CustomEdit.cpp
HEADERS + = MainWindow.h \
    CustomEdit.h
フォーム+=mainwindow.ui

編集:

この質問は同じ問題を扱っていますが、QtCreatorでこの問題を修正する方法が答えではわかりません。リンクするファイルのリストに、mocで生成された.cppファイルを明示的に追加する必要がありますか?それは苦痛のようです。

4

1 に答える 1

2

Qtクリエーターは、Qtプロジェクトの作成に使用されるIDEです。それで全部です。しかし、qmakeを使用すると、プロジェクトを構築できます。qmakeマニュアルから、

qmakeは、Makefileの生成を自動化するため、各Makefileを作成するために必要な情報は数行だけです。qmakeは、プロジェクトファイルの情報に基づいてMakefileを生成します。qmakeには、Qtを使用した開発をサポートする追加機能が含まれており、mocおよびuicのビルドルールが自動的に含まれます。

mocファイルを個別に含める必要はありませんが、必要なmocファイルに関するすべての情報を含むqmakeを実行する必要があります。生成された、Makefile.debugまたはMakefile.releaseqmakeの後を見ると、すべてのmocファイルが含まれていることがわかります。

QtクリエーターでqmakeをBuild->RebuildAll実行するには、qmakeを実行する場所に移動すると、すべての(moc)ファイルが生成されてリンクされます(Makefile.debugで)。

うまくいけば、これはあなたの未定義の参照を排除するでしょう。

于 2010-06-10T04:39:53.953 に答える