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