Hallo,
ich versuche eine MFC-Anwendung in QT-Form zu portieren. Diese nutzt eine Message-Map, um angekommene Messages mit entsprechenden Message-Handlern zu verknüpfen.
Dazu zwei Fragen:
1. Kann das Message Handling betriebssystemunabhängig gestaltet werden? Ich bin mir nämlich nicht sicher, ob die Messages der (wahrscheinlich in Windows geschriebenen) Bibliothek betriebssystemunabhängig sind, oder ob Windows wieder ein eigenes "Message-Format" hat.
2. Wie ist die Entsprechung von Message-Map in QT? Ich nehme an, dies funktioniert wieder über Signale und Slots. Oder gibt es eine eigene Message-Handler-Klasse?
Grüße,
Megadime.
Message Handling in QT
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Wenn es wirklich Windows-Messages sind: http://doc.trolltech.com/4.7/qcoreappli ... ventFilter
Ansonste würde ich ohne genauere Infos zu kennen sagen - weg davon und komplett neues Konzept benutzen...
Ansonste würde ich ohne genauere Infos zu kennen sagen - weg davon und komplett neues Konzept benutzen...
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Danke für die Antwort. Wie kann ich nun diese Funktion anwenden bzw. überschreiben? Meine Dateistruktur hat eine main.cpp, in welcher eine QApplication a erstellt wird und meine GUI-Klasse mit show gezeigt wird. Dann folgt a.exec?
So wie ich es verstanden hab, müsste ich meine GUI-Klasse von QApplication ableiten, um dort drin die Funktion zu überschreiben. Doch die GUI-Klasse ist ja ein QMainWindow.
EDIT: Habe es selber rausgefunden. Neue von QApplication abgeleitete Klasse erstellen und dann entsprechend die Funktion überschreiben.
EDIT2: Ich habe es jetzt mit winEventFilter probiert und die Application fängt Windows-Nachrichten ab, nur leider nicht die meiner Bibliothek. Da meine Bibliothek eine Funktion hat, in der man das Ziel der Nachrichten durch Window Handles angibt, dachte ich, daß das das Problem sei. Deswegen habe ich die winEvent-Fkt. in meiner GUI implementiert. Allerdings funktioniert es immer noch nicht. Nachrichten von Windows kommen zwar an, aber die entsprechenden der Bibliothek nicht.
Hier der Code:
Ist das soweit richtig? Zumindest kompiliert es.
Ist weiterhin this->winId() als Funktion zum Speichern des Window-Handles der QT-GUI korrekt?
So wie ich es verstanden hab, müsste ich meine GUI-Klasse von QApplication ableiten, um dort drin die Funktion zu überschreiben. Doch die GUI-Klasse ist ja ein QMainWindow.
EDIT: Habe es selber rausgefunden. Neue von QApplication abgeleitete Klasse erstellen und dann entsprechend die Funktion überschreiben.
EDIT2: Ich habe es jetzt mit winEventFilter probiert und die Application fängt Windows-Nachrichten ab, nur leider nicht die meiner Bibliothek. Da meine Bibliothek eine Funktion hat, in der man das Ziel der Nachrichten durch Window Handles angibt, dachte ich, daß das das Problem sei. Deswegen habe ich die winEvent-Fkt. in meiner GUI implementiert. Allerdings funktioniert es immer noch nicht. Nachrichten von Windows kommen zwar an, aber die entsprechenden der Bibliothek nicht.
Hier der Code:
Code: Alles auswählen
bool rtC3d_Client_Test::winEvent(MSG * msg, long * result){
switch(msg->message){
case(MSG_CLIENT_ARRIVED_EMPTY): return false;
case(MSG_CLIENT_ARRIVED_DATA): return false;
case(MSG_CLIENT_ARRIVED_PROPS): return false;
case(MSG_CLIENT_ARRIVED_ERROR): return false;
case(MSG_CLIENT_ARRIVED_STRING): return false;
}
return false;
}Ist weiterhin this->winId() als Funktion zum Speichern des Window-Handles der QT-GUI korrekt?