1.コンソールプロジェクトを作成します。
QT - = GUIの CONFIG + = C ++ 11 のコンソール CONFIG - = app_bundle #次定義するには、コンパイラが警告を発光させる場合は、使用 位にはQtのいずれかの機能は非推奨とマークされて(正確な警告 #は、コンパイラに依存します)。ドキュメントを参照してください #をAPIの非推奨にどのようにポートあなたのコード離れてそれから知るため。 DEFINES + = QT_DEPRECATED_WARNINGS #あなたはまた、可能にするあなたのコードがコンパイルに失敗した場合、あなたが推奨されないAPIを使用しています。 するために#やります そう、次の行のコメントを解除。 #またできる選択のみのQtの特定のバージョンまでは推奨されないAPIを無効にします。 #define + = QT_DISABLE_DEPRECATED_BEFORE = 0x060000 #Qtの前に廃止予定のすべてのAPI無効に6.0を。0 SOURCES + = \ メイン。CPP \の 基底クラス。CPP \の サブクラス。CPP #デフォルトルールのために展開。 QNX:target.path =を/ tmp / $$ {TARGET} / binに 他の UNIX:!アンドロイド:target.path =は/ opt / $$ {TARGET} / binに !のisEmpty(target.path):インストール+ = ターゲット HEADERS + = \ baseclass.h \ subclass.h
2.基底クラスを追加します。
baseclass.h
#ifndefのBASECLASS_H の#define BASECLASS_H の#include " QObjectを" クラス基底クラス:パブリックQObjectを { Q_OBJECTの 公共: 基底クラス(QObjectを * P = 0 )。 仮想〜基底クラス(){} シグナル: ボイドSIGNAL1(); }。 #endifの // BASECLASS_H
baseClass.cpp
#include " baseclass.h " 基底クラス::基底クラス(QObjectをする *のP):QObjectを(P) { }
subclass.h
#ifndefのSUBCLASS_H の#define SUBCLASS_H の#include " baseclass.h " クラスのサブクラス:公共基底クラス { Q_OBJECTの 公共: サブクラス(QObjectを * P = 0 )。 仮想〜サブクラス(){}。 // シグナル: 無効SIGNAL2(); }。 #endifの // SUBCLASS_H
subclass.cpp
#include " subclass.h " サブクラス::サブクラス(QObjectをする *のP):基底クラス(P) { }
main.cppに
#include <QCoreApplication> の#include " subclass.h " int型のmain(int型 ARGC、CHAR * ARGV []) { QCoreApplication(ARGC、ARGV)。 サブクラス *サブ= 新しいサブクラス(); 戻るa.exec(); }
コンパイルエラー:
testQtSignalBug /サブクラス。CPP:14:エラー:vtableの`の未定義の参照のためのサブクラス「 エラー:collect2はldは返さ1つの終了ステータスを
ソリューション:マクロQ_OBJECTでsubclass.hをコメントアウト
理由:不明