Seite 1 von 1

Von zweidimensionalem WideCharacter Array nach QString

Verfasst: 6. Oktober 2010 12:21
von rubikon
Hallo.


Ich habe ein zweidimensionales Array das so aussieht

Code: Alles auswählen

quint16 Text[20][80];
In diesem Array sollen zwanzig Texte mit einer maximalen Länge von Neunundsiebzig Zeichen plus abschließendes \0 stehen.

Nun möchte einen der zwanzig Texte einem QString zuweisen. Wie kann ich das machen ohne mit einer Schleife und .append zu arbeiten?

Gibt es da eine Möglichkeit?

Verfasst: 6. Oktober 2010 15:15
von padreigh
Ich habe die Befürchtung da kommt dann ein TATAAAA ICH HABS und code mit viel bösem Casten bei raus

Code: Alles auswählen

QString TATA = QString ( böserCastNach<QChar*>(Text), 20*80);
TATA.remove(0,amAnfangwas);
TATA.remove(amEndewas,20*80);
Versuchs halt mal über einen Stream und << >> ...

Verfasst: 6. Oktober 2010 17:06
von RHBaum
viel bösem Casten bei raus
naja, casten iss immer boese, aber manchmal unvermeidbar.
an der stelle sollte der cast vermeidbar sein, weil QCHar zig ueberladungen zu allen möglichen datentypen hat ....

Besser: konvertierungsfunktion von QString nehmen ....
In diesem Array sollen zwanzig Texte mit einer maximalen Länge von Neunundsiebzig Zeichen plus abschließendes \0 stehen.
das heisst das ist ein UTF16 Text mit C Kompatibler termination.
also eigentlich binarkompatibel zu wchar_t *

das bloede iss nur, das QString utf16 als unsigned short basiert ansieht und nicht als signed short.

also wenn QString::setUtf16 verwendest, musst das qint16 zu unsigned short casten !
Im unterschied zu QString::QString ( const QChar * unicode, int size ) ruft das aber ne convertierungsroutine auf ...
die wird zu 99% zwar keinen unterschied machen, weil sicher keine utf16 / QChar unkompatiblen zeichen drinne hast, aber mann weiss nie was QT intern mal aendert :-)
nur der cast Qint16 -> QCHar koennt mal ins Auge gehen, wenn TT auf die Idee kommt, QChar bissi mehr info zu verpassen. Momentan sollte es funktioniern, da das ding wirklich nur 16bit im speicher belegt.

Ciao ...