Seite 1 von 1

Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 2:59 pm
von fat-lobyte
Hallo!

Für ein Widget, habe ich eine Klasse, die von QWidget ableitet.
Als "Hilfsklasse" benötige ich für dieses Widget ein weiteres Widget (zumindest glaube ich, dass ich es benötige).

Jetzt gerade habe ich diese Hilfsklasse als eigene .hpp/.cpp-Datei. Da das ding aber zu sonst nichts zu gebrauchen ist als für das Hauptwidget, würde ich gerne einfach die Deklaration und Definition in die Datei des Hauptwidgets klopfen.

Das Hilfswidget ist Qt-Typisch:

Code: Alles auswählen

class ColorDemonstration : public QWidget
{
    Q_OBJECT

public:
    ColorDemonstration(const QColor& color_, QWidget *parent = NULL);
// ...
};
Leider geht das wegen irgendwelcher MOC-Zaubereien nicht:
colorchooser.o: In function `ColorDemonstration':
../egg/colorchooser.cpp:14: undefined reference to `vtable for ColorDemonstration'
../egg/colorchooser.cpp:14: undefined reference to `vtable for ColorDemonstration'
Man beachte, dass alles Funktioniert, sobald ich die Klasse wieder in eigene Dateien ausgliedere.

Re: Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 3:25 pm
von Xin
undefined reference to vtable ?

Vergiss den Destruktor nicht.

Re: Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 3:54 pm
von fat-lobyte
Xin hat geschrieben:undefined reference to vtable ?

Vergiss den Destruktor nicht.
Den Destruktor von Klassen die von QObject abgeleitet sind muss ich selbst nicht implementieren, das macht das "moc"-Tool.
Allerdings eben nur, wenn ich 1 Klasse-1 Header-1 Source- Datei habe. Wenn ich die Deklaration und Definition zum Source der anderen Klasse Packe, gehts eben nicht mehr.

Re: Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 4:02 pm
von Xin
fat-lobyte hat geschrieben:
Xin hat geschrieben:undefined reference to vtable ?

Vergiss den Destruktor nicht.
Den Destruktor von Klassen die von QObject abgeleitet sind muss ich selbst nicht implementieren, das macht das "moc"-Tool.
Allerdings eben nur, wenn ich 1 Klasse-1 Header-1 Source- Datei habe. Wenn ich die Deklaration und Definition zum Source der anderen Klasse Packe, gehts eben nicht mehr.
Also implementiert er den Destruktor für diese Klasse eben nicht.

Re: Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 5:13 pm
von nufan
Ich habs grade ausprobiert und es funktioniert ohne Probleme. Oft hilft es qmake neu auszuführen und das Projekt komplett neu zu kompilieren.

Re: Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 5:16 pm
von Xin
Siehe Directors-Cut-Edition von undefined reference to vtable. ^^

Re: Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 5:24 pm
von fat-lobyte
nufan hat geschrieben:Ich habs grade ausprobiert und es funktioniert ohne Probleme. Oft hilft es qmake neu auszuführen und das Projekt komplett neu zu kompilieren.
Danke, ich habs unter Windows nochmal gemacht und es hat funktioniert. Keine Ahnung, warums beim ersten mal nicht hingehaut hat :-/

Re: Qt: Mehrere QObject-Klassen in einer Datei

Verfasst: Di Apr 17, 2012 5:29 pm
von nufan
fat-lobyte hat geschrieben:
nufan hat geschrieben:Ich habs grade ausprobiert und es funktioniert ohne Probleme. Oft hilft es qmake neu auszuführen und das Projekt komplett neu zu kompilieren.
Danke, ich habs unter Windows nochmal gemacht und es hat funktioniert. Keine Ahnung, warums beim ersten mal nicht hingehaut hat :-/
Der MOC spinnt manchmal tatsächlich etwas :/
Deswegen steht auch im Qt-Tutorial:
Sollte der Compiler einmal seltsame Fehlermeldungen ausgeben oder Slots werden nicht ordnungsgemäß aufgerufen, hilft es oft qmake erneut auszuführen und das Programm komplett neu zu kompilieren.