Qt-Typen per Netzwerk übertragen

Alles rund um die Programmierung mit Qt
Antworten
mollitz
Beiträge: 81
Registriert: 5. April 2007 10:55

Qt-Typen per Netzwerk übertragen

Beitrag von mollitz »

Hi,

Ich würde gerne Variablen verschiedenen Types(alle Qt-Datentypen) übers Netzwerk verschicken. Dabei gebe ich den Namen des Types sowie den Inhalt der Variable an(Gegeben ist ein QVariant dessen Typ und Wert ich auslesen kann). Zum Auslesen der Werte nehme ich den >> Operator von QDataStream, der für jeden Qt-Datentyp implementiert ist.
Jetzt weiß ich allerdings nicht wie ich die Daten wieder einlesen kann. Die Daten könnte ich jetzt ganz einfach wieder mit einem DataStream einlesen, aber ich sehe keine Möglichkeit eine Variable des Types zu erstellen, den ich als String-Information mitschicke. Muss ich jetzt ein switch/case machen, das den string auf jeglichen typ-namen überprüft und für jeden fall das objekt mit dem richtigen typ erzeugt? Da hab ich nämlich keine Lust drauf und ich dachte QVariant wär genau für sowas geeignet, ich sehe aber keine Möglichkeit das damit zu realisieren.
Für jeden Tip dankbar,

Moritz Schäfer
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

3 Hinweise:

1. der variant hat einen internen Typ, den solltest du definitiv mitschicken !

2. die Umwandlung des Variants in Strings ist nicht immer 100% reversiebel, deshalb als übertragungsform IMHO ungeeignet.

3. QT Abhangigkeit .... warum ? Fuer die benötigte Serialisierung, und die Variant Factory Methoden kann man sicher eine QT Basierende Implementation vorsehen, aber fuer das Protokoll selber wuerd ich mich nicht an der qt orientieren. Es gibt stabilere(in sachen versionen und so) Libs ! Du verbausst dir die Möglichkeit, diesen rudimentaeren Mechanismuss, den Du sicher ned nur einmal in einer App verwenden willst, in nicht qt abhaengige programme zu verwenden. Und der Mechanismus an sich riecht schon von weitem nach Server-Client programmen. Die Frage, wer bitte baut Server (ohne GUI) mit qt Abhaengigkeiten ???

Ciao ....
Antworten