qt-designer aplikace a čeština - vyřešeno
Jiri Kouba
jiri.kouba na volny.cz
Pondělí Říjen 15 21:35:22 CEST 2001
> > Tak s tím jsem se dostal relativně nejdál - místo háčkovaných písmen jsou
> > otazníky a za nimi řetězec pokračuje.
> > *.cpp:vypadá takto :
> > CheckBox1->setText( ( QString::fromUtf8( "Jen relativni ýá-ěšč-linky" )
> > ).QString::local8Bit() );
>
> No spravna cesta to rozhodne neni, funkce setText() vyzaduje jako parametr
> QString, nikoli QCString v iso-8859-2. V predchozim prikladu probiha
> trojnasobna konverze
> 1. fromUtf8 -> z utf8 do QString, tedy asi utf16
> 2. local8bit -> z utf16 do iso-8859-2
> 3. konverze parametru z QCString (coz je vlastne char *) -> tedy z
> iso-8859-2 na utf16
>
> > Úspěšnost dalšího v odpovědích navrženého postupu:
> > smazání tr : nezobrazí se ani ýáíéůú
>
> Nemohu posoudit, s uic nedelam ale ocekaval bych ze by to melo stacit a pro
> pouziti s designerem by to melo byt nejjednodussi reseni, stacilo by
> nadefinovat prazdne makro tr. Nenahradil jste mezitim v ramci pokusu
> retezec v utf8 retzecem v iso-8859-2, viz priklad vyse?
>
> > Taky jsem zkusil kodek:
> > QTextCodec *codec = QTextCodec::codecForName("ISO 8859-2");
> > CheckBox1->setText( codec->fromUnicode( "Jen relativni ýá-ěšč-linky" ) );
> > s tímtéž výsledkem , tedy ani čárkovaná diakritika.
>
> Tohle musi fungovat, akorat ze misto fromUnicode by melo byt toUnicode. Sam
> to timto zpusobem pouzivam, s tim ze codec mam jako globalni promennou
> ktera se inicializuje pri spusteni programu a misto codec->toUnicode() mam
> vytvorene makro/inline funkci CZ().
>
> Dalsi funkcni zpusob je
> setText(QString::fromLocal8Bit("Jen..."));
>
> ale funguje to tak, ze pokazde cte locale a vytvari prislusny QTextCodec,
> takze pro caste volani to neni tak vhodne.
>
> Martin
Obojí zabralo, ale ....
jde o to, z čeho kam se konvertuje. Je to nápadné, že můj nefungující postup
obsahoval fromUnicode místo toUnicode a
fromUtf8 místo fromLocal8Bit. A v tom bylo jádro problému:
Já psal o cpp vytvořených designerem a uic-kem, a v nich jsou ty stringy
opravdu v utf-8. (Kdekoliv najde diakritku, naseka uic automaticky konverzi
QString::fromUtf8(:".....") a z toho jsem vychazel a konvertoval to dal ,
ale je to slepa ulička.)
Tyto rady předpokládají, že ty řetězce jsou naopak v lokálním kodování, čehož
dosáhnu třeba tak, že do *.cpp doedituju ty řetězce editorem nastaveným tak,
aby úpravy dělal v 8859-2.
Pak bezvadně funguje jak
setText(QString::fromLocal8Bit("Jen relativni ýá-ěšč-linky."));
tak i
#include <qtextcodec.h>
QTextCodec *codec = QTextCodec::codecForName("ISO 8859-2");
CheckBox1->setText( codec->toUnicode( "Jen relativni ýá-ěšč-linky" ) );
Díky
--
******************** Jiri Kouba *************************************
J.A.K. a Unitas fratrum, Linux, Apache a Nnee (jeho predchudci) , ...
CAD/CAM Pro/ENGINEER (TM)
*********************************************************************
Další informace o konferenci Linux