CustomEvents in QT4.0
Verfasst: 26. November 2005 08:00
Für das Arbeiten mit mehreren Threads benötigt ich CustomEvents, Ziel ist es aus einem Arbeits-Thread dem GUI Thread mit zuteilen, das neue Daten bereit liegen und diese abgeholt werden können. In QT3 habe ich dafür ein CustomEvent verwendet, dieses wurde mit im Konstruktor mit einer ENUM Konstante "enum{GlobalMessage=1001}" versehen. Dieses "QCustomEvent(GlobalMessage)" wurde dann per postEvent(QCustomEvent(GlobalMessage)) an den GUI Thread übermittelt. In QT4 wollte ich dafür SIgnalSlots verwenden kann. ABER: SIGNAL-SLOTS über Thread Grenzen scheint langsamer zu sein und legt die GUI lahm, beziehungsweise überlastet diese. Da der SLOT sofort ausgeführt wird. Mit QCustomEvents darf der GUI Thread entscheiden wann er das Event verwertet oder ob er überhaupt Zeit hat(Stichwort: accept Drop). Soweit zur Motivation.
Also Ziel ist es ein CustomEvent in QT4 zu verwenden, leider verwaist die QT Docu in diesem Punkt ins nichts und auch forum suchen und google brachte bisher nichts. Eine Class QCustomEvent wie in QT3 gibt es nicht mehr. In der Docu steht sinngemäß, das man sich eine Ableitung von QEvent schaffen soll und eine eigenen ENUM konstruiert irgendwas über 1000. Leider bekomme ich das nicht hin.
Da ich nicht weis wie es im QEvent aussieht habe ich einfach ein eigene Classe angelegt diese ist aber anscheint so leer, das sie nicht im Speicher liegen bleit jedenfalls beschwert sich der Linker das nix da ist. Irgendwie verständlich aber was soll ich da rein schreiben?
class GlobalMessageEvent : public QEvent
{
public:
GlobalMessageEvent();
enum Type{GlobalMessage=1001};
}
GlobalMessageEvent :: GlobalMessageEvent()
{
}
Die Frage in Kurz:
Wie erzeuge ich in QT4 ein QEvent mit einem Type größer 1000, bzw ein aus QT3. bekanntes QCustomEvent.
Also Ziel ist es ein CustomEvent in QT4 zu verwenden, leider verwaist die QT Docu in diesem Punkt ins nichts und auch forum suchen und google brachte bisher nichts. Eine Class QCustomEvent wie in QT3 gibt es nicht mehr. In der Docu steht sinngemäß, das man sich eine Ableitung von QEvent schaffen soll und eine eigenen ENUM konstruiert irgendwas über 1000. Leider bekomme ich das nicht hin.
Da ich nicht weis wie es im QEvent aussieht habe ich einfach ein eigene Classe angelegt diese ist aber anscheint so leer, das sie nicht im Speicher liegen bleit jedenfalls beschwert sich der Linker das nix da ist. Irgendwie verständlich aber was soll ich da rein schreiben?
class GlobalMessageEvent : public QEvent
{
public:
GlobalMessageEvent();
enum Type{GlobalMessage=1001};
}
GlobalMessageEvent :: GlobalMessageEvent()
{
}
Die Frage in Kurz:
Wie erzeuge ich in QT4 ein QEvent mit einem Type größer 1000, bzw ein aus QT3. bekanntes QCustomEvent.