L
loudking
Dear all,
I am building a qt/c++ application and stuck on a wide char problem. Could anybody give me a hand? Thanks.
I have a print function that takes variable element argument and converted those arguments in a QString then calls QT native printing option. But output looks weird.
/**************
* Print
*/
void OutputWidget:
rint(wchar_t *fmt, ...)
{
QString line;
va_list arglist;
wchar_t wcharStr[5000];
va_start(arglist, fmt);
vswprintf(wcharStr, 4999, fmt, arglist);
line = QString::fromWCharArray(wcharStr);
print(line);
va_end(arglist);
}
/*******************
* Test Code
*/
wchar_t *fmt = L"abc=%S";
wchar_t *name = L"def";
QString line = QString::fromWCharArray(name);
outputWidget->print("fmt=");
outputWidget->print(L"fmt=");
outputWidget->print(QString::fromWCharArray(fmt));
outputWidget->print("name=");
outputWidget->print(line);
outputWidget->print(fmt, name);
#define BUF_SIZE 256
wchar_t wcsbuf[BUF_SIZE];
wchar_t wstring[] = L"ABCDE";
int num;
num = swprintf(wcsbuf, BUF_SIZE, L"%s", "xyz");
outputWidget->print(QString::fromWCharArray(wcsbuf));
num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%S", wstring);
outputWidget->print(QString::fromWCharArray(wcsbuf));
num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%i", 100);
outputWidget->print(QString::fromWCharArray(wcsbuf));
outputWidget->print(L"%d", 127L);
/****************
* Output
*/
fmt=
fmt=
abc=%S
name=
def
abc=d
祸zæ¼±ç‘µç•°ä‘´ç‰©æ¡ƒæ½¯æ•³â¤¨æ´€æ¥¡ç®æ¹©æ½¤â¹·ç£ã©°ã¤·
祸zæ¼±ç‘µç•°ä‘´ç‰©æ¡ƒæ½¯æ•³â¤¨æ´€æ¥¡ç®æ¹©æ½¤â¹·ç£ã©°ã¤·A
祸zæ¼±ç‘µç•°ä‘´ç‰©æ¡ƒæ½¯æ•³â¤¨æ´€æ¥¡ç®æ¹©æ½¤â¹·ç£ã©°ã¤·A100
127
PLATFROM is Windows 7 64bit
/***********************
* Makefile flags
*/
CPPOPT = /EHsc -nologo -W3 -WX -DSTRICT -D_CRT_NONSTDC_NO_DEPRECATE -DUNICODE \
-MD -I.
CPPOPT += -DWIN64 -D_CRT_SECURE_NO_DEPRECATE -wd4244 -wd4267
I am building a qt/c++ application and stuck on a wide char problem. Could anybody give me a hand? Thanks.
I have a print function that takes variable element argument and converted those arguments in a QString then calls QT native printing option. But output looks weird.
/**************
*/
void OutputWidget:
{
QString line;
va_list arglist;
wchar_t wcharStr[5000];
va_start(arglist, fmt);
vswprintf(wcharStr, 4999, fmt, arglist);
line = QString::fromWCharArray(wcharStr);
print(line);
va_end(arglist);
}
/*******************
* Test Code
*/
wchar_t *fmt = L"abc=%S";
wchar_t *name = L"def";
QString line = QString::fromWCharArray(name);
outputWidget->print("fmt=");
outputWidget->print(L"fmt=");
outputWidget->print(QString::fromWCharArray(fmt));
outputWidget->print("name=");
outputWidget->print(line);
outputWidget->print(fmt, name);
#define BUF_SIZE 256
wchar_t wcsbuf[BUF_SIZE];
wchar_t wstring[] = L"ABCDE";
int num;
num = swprintf(wcsbuf, BUF_SIZE, L"%s", "xyz");
outputWidget->print(QString::fromWCharArray(wcsbuf));
num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%S", wstring);
outputWidget->print(QString::fromWCharArray(wcsbuf));
num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%i", 100);
outputWidget->print(QString::fromWCharArray(wcsbuf));
outputWidget->print(L"%d", 127L);
/****************
* Output
*/
fmt=
fmt=
abc=%S
name=
def
abc=d
祸zæ¼±ç‘µç•°ä‘´ç‰©æ¡ƒæ½¯æ•³â¤¨æ´€æ¥¡ç®æ¹©æ½¤â¹·ç£ã©°ã¤·
祸zæ¼±ç‘µç•°ä‘´ç‰©æ¡ƒæ½¯æ•³â¤¨æ´€æ¥¡ç®æ¹©æ½¤â¹·ç£ã©°ã¤·A
祸zæ¼±ç‘µç•°ä‘´ç‰©æ¡ƒæ½¯æ•³â¤¨æ´€æ¥¡ç®æ¹©æ½¤â¹·ç£ã©°ã¤·A100
127
PLATFROM is Windows 7 64bit
/***********************
* Makefile flags
*/
CPPOPT = /EHsc -nologo -W3 -WX -DSTRICT -D_CRT_NONSTDC_NO_DEPRECATE -DUNICODE \
-MD -I.
CPPOPT += -DWIN64 -D_CRT_SECURE_NO_DEPRECATE -wd4244 -wd4267