47

私はQt(私は初めてです)4.8.2をVisual Studioで使用しており、「Contact」という名前の基本クラスを作成しました。このクラスを Qt 専用にしたくないので、「Contact」と QObject を継承する別のクラス「QContact」を作成し、Q_OBJECT マクロなどのすべての Qt 関連のビジネスを処理するつもりでした。

残念ながら、私が継承したとき、ビルドは失敗しました。

moc_QContact.cpp(53): error C2039: 'staticMetaObject' : is not a member of 'Contact'
moc_QContact.cpp(75): error C2039: 'qt_metacast' : is not a member of 'Contact'
moc_QContact.cpp(80): error C2039: 'qt_metacall' : is not a member of 'Contact'

Web で少し調査したところ、非 Qt クラスから Qt クラスを派生させることはできないことがわかりました。それを修正するために、「Contact」は「QObject」を継承できました(試してみましたが、うまくいきました)。しかし、そうすると、私の問題であるQt専用になります。

だから私が尋ねるのはこれです: Qt クラスの Qt 以外の基本クラスを作成するにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

100

QObjectクラスは、そのクラスから派生していない他のクラスから派生させることができますが、基本クラス リストQObjectの最初の基本クラスである必要があります。

したがって、これは間違っています:

class QContact: public Contact, public QObject {};

次のように書く必要があります

class QContact: public QObject, public Contact {};
于 2012-08-04T09:37:29.653 に答える