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 .
- 1773 megtekintés
Hozzászólások
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.
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
a cerr csak veletlenul stdin, ugye?
- A hozzászóláshoz be kell jelentkezni
Igen, elnezest. A javitott kod.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Oké, köszi.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
- A hozzászóláshoz be kell jelentkezni