Witam, kiedyś zadawałem dość podobne pytanie ale teraz skupiam się na nieco innym aspekcie, mam taki kod programu:
#include <QCoreApplication>
#include <QDebug>
#include <QString>
#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::string str;
std::cin >> str;
std::cout << str << "\n"; //ok
std::cout << int(str[0]) << "\n"; //ok
std::cout << char(-91) << "\n"; //ok
char c = -91;
qDebug() << c; //?
QChar qc = -91;
qDebug() << qc; //??
qDebug() << qc.unicode(); //?!
return a.exec();
}
Biorąc pod uwagę kodowanie konsoli windowsowej ( 852 OEM - Latin II) kod litery 'ą' zapisany zapisany w typie char wynosi -91. Wypisanie w ten sposób tej litery daje poprawny wynik:
std::cout << char(-91) << "\n"; //ok
gorzej kiedy chcę wypisać ten sam znak o tym samym kodzie w tym samym typie za pomocą qDebug() :
char c = -91;
qDebug() << c; //?
dostaje wtedy na ekranie znak Y...
Moje pierwsze pytanie brzmi: Co strumień qDebug() robi z kodem mojego znaku?
Dalej wykorzystując typ QChar jest już całkowita masakra:
przecież to ten sam kod który powinien być przez windowsową konsole tak samo interpretowany. Dla pewności sprawdziłem jeszcze kod litery ą dla typu unsigned char i przypisałem do QChar:
wypisana wartość bzdurna ale chociaż kod liczbowy się zgadza ( czyli QChar przechowuje liczby unsigned )
tak dla ciekawostki, teraz:
unsigned char c = 165;
qDebug() << c;
będę miał wypisaną nie literę ą ale jej kod czyli 165.
Co więc muszę zrobić żeby wypisać znak używając jego kodu wykorzystując narzędzia z Qt? Nie chodzi mi tu nawet o wyświetlanie polskich znaków w konsoli bo nie ma takiej potrzeby ( Qt to głównie GUI ). Po prostu totalnie nie rozumiem co QChar i qDebug() robi z moim kodem znaku...
z góry dziękuje za pomoc ;)