Seite 1 von 1
Nicht-Qt-Klasse signals&slots verwenden?
Verfasst: 8. Dezember 2010 14:32
von Melle_87
Hallo!
Ich habe das Problem, dass ich bei einer Klasse, die eigentlich nichts mit den Funktionen von Qt zu hat Signals&Slots verwenden möchte.
Wahrscheinlich muss ich die Klasse dann von einer Qt-Klasse ableiten.
Welche Klasse eignet sich dafür am meisten?
Also es handelt sich um eine selbsterstellte Klasse, der im Grunde nur die Fähigkeit fehlt Signals&Slots zu verwenden.
Verfasst: 8. Dezember 2010 14:41
von Giesbert
Hi,
die minimale Anforderung is QObject. QObject implementiert die basis signal/slot logic. Alle von QObject abgeleiteten Klassen können Signal/Slot nutzen.
Verfasst: 8. Dezember 2010 14:42
von pfid
Von QObject erben und Q_OBJECT in die Klassendefinition schreiben.
http://doc.trolltech.com/4.7/signalsand ... ll-example
Verfasst: 8. Dezember 2010 14:45
von Melle_87
Dankeschön.
Hat wunderbar funktioniert.
Verfasst: 8. Dezember 2010 20:03
von franzf
VERWENDEN sollte auch komplett ohne QObject-ableiten gehen. Q_OBJECT (das Macro, was QObject-ableiten impliziert) ist nur nötig, wenn du selber SIGNALS senden oder SLOTS implementieren willst (in jener Klasse) - oder eben auch Properties, Anbindung an das Qt-Metaobject-Sytem halt.
Wenn es darum geht, ein Core-System ohne Qt-Abhängigkeit zu implementieren, kannst du auch da wo SIGNALS/SLOTS nötig sind, einen dünnen Wrapper um das Objekt legen, deine eigentliche Qt-Schicht kommuniziert dann mit dem Wrapper.
Kannst du mal sagen, was deine eigentliche Motivation/Problem ist?
Verfasst: 9. Dezember 2010 08:46
von Melle_87
Also ich habe insgesamt drei Klassen: einmal eine "Main-Klasse", die von QMainWindow abgeleitet ist, dann eine Klasse Thread, die von QThread abgeleitet ist und dann noch eine Klasse Parser.
Nun möchte ich aus der Klasse Parser ein Signal an die Main-Klasse senden, die dann Ausgaben auf der GUI macht.
In der Main-Klasse enthält eine Instanz der Klasse Thread. Und die Klasse Thread enthält eine Instanz der Klasse Parser.
Deshalb habe ich nun die Klasse Parser von QObject abgeleitet.
Verfasst: 9. Dezember 2010 09:23
von Giesbert
Hi,
wenn du mit Thread sund signals arbeitets, dann achte darauf, das die instanzen im richtigen thread erzeugt werden, bevor du ein connectr machst. Sonst kann es passieren, das die slots im falschen thread aufgerufen werden, oder benutze beim connect QueuedConnection.
Das kann sonst sehr unschöne Seiteneffekte haben.