Frage

Ich habe die verwandten Fragen durchgesehen und konnte nichts finden, was genau das ansprach, worüber ich sprach. Lassen Sie mich also beschreiben.

Ich habe eine Klasse, sagen wir Foo, das eigene Slots und Signale benötigt, aber auch von QxmdefaultHandler erben muss (klingt ziemlich seltsam, aber ich habe diese Situation begegnet, als ich versucht habe, QHTTP zu verwenden, um eine Website direkt in einen QBuffer zu lesen).

class foo: public QXmlDefaultHandler, public QObject
{
    public:
        foo();
        ~foo();

       Q_OBJECT
   public slots:
       void bar();
}

Dieser Code wird, wenn er von einem CPP begleitet wird, um die Balken mit einem Signal an einem anderen Ort zu verbinden, nicht kompiliert. Sie erhalten Fehler über einige Mitglieder von QObject, die nicht Mitglied von QXMDefaultHandler sind. Zusätzlich können Sie Q_Object nicht verschieben oder haben vtbare Fehler, weil Sie einige Dinge nicht implementieren (weiter! Versuchen Sie es!).

Bitte beachten Sie meine Antwort auf die (sehr einfache) Fix. Ich werde Sie als akzeptierte Antwort unterhalten, wenn ich denke, Sie erklären es besser als ich.

Bearbeiten: Für Sie, C ++ - und QT -Tierärzte, posten Sie bitte eine Antwort, wenn Sie sie besser erklären können. Ich habe viel Zeit damit verbracht, diese Informationen zu suchen. Bitte helfen Sie jemand anderem, wenn Sie es besser machen können als ich.

War es hilfreich?

Lösung

Das Dokumentation für MOC gibt an, dass bei mehreren Vererbung die Klasse zuerst erscheinen sollte

Wenn Sie mehrere Vererbung verwenden, geht MOC davon aus, dass die erste erbliche Klasse eine Unterklasse von QObject ist. Stellen Sie außerdem sicher, dass nur die erste ererbte Klasse ein QObject ist.

 // correct
 class SomeClass : public QObject, public OtherClass
 {
     ...
 };

Die virtuelle Vererbung mit QObject wird nicht unterstützt.

Andere Tipps

class foo: public QObject, public QXmlDefaultHandler
{
    public:
        foo();
        ~foo();
   Q_OBJECT
   public slots:
       void bar();
}

So einfach es auch klingt, wenn Sie QObject nicht zuerst in die Vererbungsliste einfügen, ist diese Aufgabe unmöglich. Es ist eine Einschränkung im Meta -Objektsystem von QT. Wenn Sie dies nicht tun, versucht der Compiler, einige Mitglieder von QObject als Teil von QXMDefaultHandler anzuwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top