c++/QT karakter kódolás

 ( Dgzt | 2009. augusztus 6., csütörtök - 13:39 )

Hellosztok!

Épp kezdek ismerkedni a QT-val. C++ -ban írok egy olyan programot, amivel kilehet tallózni egy könyvtárt és kiírja a konzolra a tartalmát. A hiba ott van, hogy ha kittalóztam a könyvtárat, akkor az ékezetes könyvtárakat jól jeleníti meg a, de nem jól adja vissza a QFileDialog. Ez ellen mi a megoldás? Hol lehet megadni a QT-nek, hogy mi legyen a kódolás? Gépemen jelenleg hu_HU.UTF-8 .

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Qt-s (igen, kis t-vel) cuccok QStringet használnak ahol csak lehet. Pontosan hogy próbálod kiíratni? std::cout -tal? Ajánlom figyelmedbe a qDebug() -ot.

Illetve cin/cout maniasoknak ajanlom figyelmebe a Qt-style megoldast.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

a cerr csak veletlenul stdin, ugye?

Igen, elnezest. A javitott kod.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

A programkód részlet:

QFileDialog dial;
dial.setFileMode(QFileDialog::Directory);

QString filename = dial.getExistingDirectory(this);

És ezt nyitom meg opendir(string) paranccsal, de nem nyitja meg, ahol van "extra" karakter, és ellenörzés képp kiírattam std::cout << filename.toSdtString() -el.

Az opendir fuggveny az jol sejtem, hogy nem Qt-s?
Tehat megfelelo kodolasra kellene alakitani a QString-rol. Nezegesd meg a QString kodolasi lehetosegeit ( .toUtf8() .toLocal8Bit() .toLatin1() stb.)

De az igazan jo es biztos megoldas az lenne ha a konyvtar/fajlmuveleteket is a Qt osztalyaival csinalnad.
Tehat a javaslatom: opendir(string) helyett QDir mydir(string);

Igy biztos elkerulod a kodolasi problemakat.

Oké, köszi.

Es QStringet soha, semmilyen korulmenyek kozt ne irass ki std:: fuggvenyekkel, mert hianyzik a hozzajuk valo rendes tamogatas. Azert irtam a fenti "csalast", mert azzal rendesen lehet kiiratni (cout << string), megis Qt osztalyokat hasznalhatsz.
En a fentit ugy hasznalom ahogy ott van, tehat globalis valtozokkent. Mivel nalam csak a tesztekben van szukseg kiiratasra, igy nem okoz kavarodast (1 teszt max 2-3 forrasfajl, es csak 1-ben hasznalom). Gondolom extern-ezessel meg hasonlokkal lehet javitani a hatasfokon.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Köszi, QDir -t nézegetem éppen, ez eddig valahogy kimaradt a látókörömből, most ismerkedek vele. Mondjuk std::cout csak ellenőrzésekre használom, hogy eddik okés-e a program.

Akkor surgosen ragozd el multidoben. A Qt-s cuccoknal tobbet art mint hasznal.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));