Qt: Definieren Sie einen benutzerdefinierten Ereignistyp
Habe ich eine benutzerdefinierte Ereignis in meinem Qt-Anwendung, indem Sie Unterklassen von QEvent.
class MyEvent : public QEvent
{
public:
MyEvent() : QEvent((QEvent::Type)2000)) {}
~MyEvent(){}
}
Um zu prüfen, für diese Veranstaltung, ich verwende den folgenden code in ein Ereignis () - Methode:
if (event->type() == (QEvent::Type)2000)
{
...
}
Ich würde gerne in der Lage sein zu definieren, die benutzerdefinierte event-Typ irgendwo in meiner Anwendung so, dass brauche ich nicht zu Stimmen die tatsächlichen integer-in meinem Fall Methoden. Also in meinem Fall () - Methoden, die ich möchte in der Lage sein, etwas zu tun, wie
if (event->type() == MyEventType)
{
...
}
Irgendwelche Gedanken, wie und wo im code ich das tun kann?
InformationsquelleAutor der Frage Chris | 2010-02-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn der event-Typ identifiziert Ihre speziellen Klasse, ich würde es dort:
InformationsquelleAutor der Antwort Georg Fritzsche
Für die Bequemlichkeit, können Sie die QEvent::registerEventType() static-Funktion zu registrieren und reservieren Sie einen benutzerdefinierten Ereignis-Typ für Ihre Anwendung. Damit Sie nicht versehentlich wieder mit einer custom event-Typ schon im Einsatz an anderer Stelle in Ihrer Anwendung.
Beispiel:
InformationsquelleAutor der Antwort Ostap
Den idiomatischen Umgang mit solchen Problemen ist das erstellen einer Vorlage wrapper-Klasse, die durch den Einsatz CRTP. Für jedes benutzerdefinierte Ereignis-Typ, eine solche Vorlage stellt einen neuen Typ, also eine separate
staticType()
Mitglied gibt für jeden Typ die Rückgabe seiner einzigartigen registrierte geben.Unten gebe ich drei Möglichkeiten der Identifizierung von Arten:
Durch
staticType()
-- dies ist nur nützlich innerhalb eine Anrufung der Anwendung und dem Typ verwendet werdenQEvent
. Die Werte sind nicht garantiert, bleiben die gleichen zwischen den aufrufen einer Anwendung. Sie nicht gehören, die im dauerhaften Speicher, wie in einem Protokoll.Durch
localDurableType()
- diese bestehen bleiben zwischen den aufrufen und zwischen Neukompilierungen mit dem gleichen compiler. Es spart die manuelle definition derdurableType()
Methode bei der Definition komplexer Ereignisse.Durch
durableType()
-- das sind wirklich cross-Plattform und werden die gleichen sein, es sei denn, Sie ändern die event-Klasse Namen in Ihrem code. Sie müssen manuell definierendurableType()
wenn Sie nicht mit derNEW_QEVENT
makro.Beide
localDurableType()
unddurableType()
unterscheiden zwischen Qt 4 und 5 aufgrund von änderungenqHash
.Verwenden Sie die header in zwei Arten:
EventWrapper.h
InformationsquelleAutor der Antwort Kuba Ober