QObject seit 4.5 invokable?
QObject seit 4.5 invokable?
Ich versuche gerade, von QObject zu erben, aber der QObject-Konstruktor ist seit 4.5 mit dem Makro Q_INVOKABLE versehen. Von einer Klasse mit privatem Konstruktor kann ich ja nicht erben.
Dabei bin ich mir sicher, daß ich eine Ableitung schon mehrmals in der Vergangenheit gemacht habe. Laut Doku ist der Konstruktor in dieser Beziehung verändert (seit 4.5):
http://doc.trolltech.com/4.5/qobject.html
Was nun? Und vor allem, warum?
Dabei bin ich mir sicher, daß ich eine Ableitung schon mehrmals in der Vergangenheit gemacht habe. Laut Doku ist der Konstruktor in dieser Beziehung verändert (seit 4.5):
http://doc.trolltech.com/4.5/qobject.html
Was nun? Und vor allem, warum?
???
Den wolltest doch aber ned zum vererben nutzen oder ???
du kannst von jeder klasse erben, die Dir einen benutzbaren Construktor zur verfuegung stellt.
ist dies nicht der Standardconstruktor musst du den anderen Construktor expliziet in deiner Initialisierungsliste aufrufen.
Ich bin mir sicher, das QObject nen Construktor mit der signatur QObject::QObject(QObject * parent) Dir zur verfuegung stellt, den musst halt nur nutzen ! (Siehe http://de.wikipedia.org/wiki/Initialisierungsliste)
Schau dir doch mal die mitgelieferten Beispiele in der qt an ... ich schaetz mal , das da grob 60% wenn ned mehr, der da deklarierten Klassen von QOBject ableiten. Cheaten die alle oder was ?
Warum sollt man eine kopie von sowas brauchen ???
Ciao ...
was sich aber nur auf den CopyConstructor (Signatur QOBject::QObject(const QOBject & ) ) bezieht !!!aber der QObject-Konstruktor ist seit 4.5 mit dem Makro Q_INVOKABLE
Den wolltest doch aber ned zum vererben nutzen oder ???
du kannst von jeder klasse erben, die Dir einen benutzbaren Construktor zur verfuegung stellt.
ist dies nicht der Standardconstruktor musst du den anderen Construktor expliziet in deiner Initialisierungsliste aufrufen.
Ich bin mir sicher, das QObject nen Construktor mit der signatur QObject::QObject(QObject * parent) Dir zur verfuegung stellt, den musst halt nur nutzen ! (Siehe http://de.wikipedia.org/wiki/Initialisierungsliste)
Schau dir doch mal die mitgelieferten Beispiele in der qt an ... ich schaetz mal , das da grob 60% wenn ned mehr, der da deklarierten Klassen von QOBject ableiten. Cheaten die alle oder was ?
weil die instanzdaten nix anderes sind als verwaltungsdaten, die jedes QObject soweiso neu, bzw nen eigenen satz, braucht ... was was alle QObjecte verwenden, iss eh statisch bzw global.Und vor allem, warum?
Warum sollt man eine kopie von sowas brauchen ???
Ciao ...
Zuletzt geändert von RHBaum am 12. November 2009 09:26, insgesamt 1-mal geändert.
Noe, ich verwend die 4.5.0
und QObject::QObject(QObject * parent)
iss bei mir definitiv nicht private !!!
nutz ich taeglich ....
es ist Q_INVOKABLE, das macht es nicht private, sondern bewirkt eigentlich das es nen mechanismuss gibt, wo man QObjecte in den QT Mechanismen "weitergeben", quasi kopieren, aber eben nicht wirklich, ohne den Copy Construktor (andere Signatur) zu benutzen ....
der Constructor iss schon noch zugänglich (public in dem Fall) für dich !
Ciao ...
und QObject::QObject(QObject * parent)
iss bei mir definitiv nicht private !!!
nutz ich taeglich ....
es ist Q_INVOKABLE, das macht es nicht private, sondern bewirkt eigentlich das es nen mechanismuss gibt, wo man QObjecte in den QT Mechanismen "weitergeben", quasi kopieren, aber eben nicht wirklich, ohne den Copy Construktor (andere Signatur) zu benutzen ....
der Constructor iss schon noch zugänglich (public in dem Fall) für dich !
Ciao ...
Code: Alles auswählen
class Schedule : public QObject
{
Q_OBJECT
public:
Schedule(QObject* parent = 0);
....
Code: Alles auswählen
Schedule::Schedule(QObject* parent)
: QObject(parent)
{
}
QObject::QObject: Kein Zugriff auf private Member
Würdest Du mir aber zustimmen, daß Q_INVOKABLE beim Konstruktor erst seit 4.5 drin ist?
Ich verwende 4.5.3 mit einem aktuellen msvc.
Ich muesst nachschauen ....
Aber in der qt 4.5.0 iss es definitv drin ....
Aber trotzdem funktioniert sowas
klaglos bei mir ...
sicher das ned was anderes dir den fehler verursacht. Compilerfehlermeldungen sind manchmal ganz schoen ... aehm unpraezise ^^
Ciao ...
Aber in der qt 4.5.0 iss es definitv drin ....
Aber trotzdem funktioniert sowas
Code: Alles auswählen
Schedule::Schedule(QObject* parent)
: QObject(parent)
{
} sicher das ned was anderes dir den fehler verursacht. Compilerfehlermeldungen sind manchmal ganz schoen ... aehm unpraezise ^^
Ciao ...
Ich habe ein Minimalprogramm erzeugt, das ohne Mucken kompiliert. Den Fehler im ursprünlichen Code sehe ich noch nicht, vor allem da ich das Minimalprogramm von den Vererbungsangaben und vom Konstruktor her nicht anders gemacht habe...
Ich schließe mal der Reihe nach alles aus und suche das Problem.
Ich schließe mal der Reihe nach alles aus und suche das Problem.
Diese hier:
Wenn ich Copy-Ctor und Zuw.-Operator hinzufüge, kompiliert es:
Ich kam auf diesen Versuch wegen der weiteren Compilermeldung neben "QObject::QObject is private":
Dabei will ich gar kein eigendefiniertes Copy-Zeugs. Die einzigen Member sind eine QList, ein int und ein bool.
Code: Alles auswählen
#include <QObject>
#include <QString>
#include <QMap>
#include <QList>
#include <QVariant>
Code: Alles auswählen
Schedule(const Schedule&) {}
Schedule& operator=(const Schedule&) { return *this; }
Code: Alles auswählen
Object.h(115): Siehe Deklaration von 'QObject'
Diese Diagnose trat in der vom Compiler generierten Funktion "Schedule & Schedule::operator =(const Schedule &)" auf.
Schedule.cpp
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten: