• 10661阅读
  • 4回复

QTextCodec::codecForName("GBK")应该返回什么? [复制链接]

上一主题 下一主题
离线lx_bupt
 

只看楼主 倒序阅读 楼主  发表于: 2006-05-27
我用了一个别人可以显示中文的源程序,在自己机子上就不能显示。
int main( int argc, char **argv )
{
QApplication a( argc, argv );
char *string = "a中文按钮a";
printf("%s\n",string);
QTextCodec *gbk_codec = QTextCodec::codecForName("GBK");
printf("%s\n",gbk_codec);
QString gbk_string = gbk_codec->toUnicode(string);
printf("%s\n",&gbk_string);
QPushButton quit( gbk_string,0 );
quit.resize( 100, 50 );
QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT(quit()) );
a.setMainWidget( &quit );
quit.show();
return a.exec();
}
以上是代码,第一行还可以打印出中文按钮4个字。到了printf("%s",gbk_codec)就是乱码了(这是否代表我没有得到GBK码?),至于printf("%s",&gbk_string)就更是乱码了。
请问printf("%s",gbk_codec)如果正确的话应该显示什么?我的问题怎么解决?
[ 此贴被XChinux在2006-05-28 08:14重新编辑 ]
离线lx_bupt

只看该作者 1楼 发表于: 2006-05-27
还有怎么能给一个QString类型的变量赋与一个字符串?
QString *a ="aaaa";这样肯定是不行的。
离线XChinux

只看该作者 2楼 发表于: 2006-05-28
你用QTextCodec::codecForLocale()看看它的返回值是什么。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线lx_bupt

只看该作者 3楼 发表于: 2006-05-28
QTextCodec *locale_codec = QTextCodec::codecForLocale();
cout << locale_codec << endl;
QTextCodec *gbk_codec = QTextCodec::codecForName("GBK");
cout << gbk_codec << endl;
输出的分别是两个地址:
0x804bd68
0x804bd48
对吗?
离线浪漫天使
只看该作者 4楼 发表于: 2006-05-29
引用第0楼lx_bupt2006-05-27 23:15发表的“QTextCodec::codecForName("GBK")应该返回什么?”:
我用了一个别人可以显示中文的源程序,在自己机子上就不能显示。
int main( int argc, char **argv )
{
QApplication a( argc, argv );
char *string = "a中文按钮a";
.......


我用了一个别人可以显示中文的源程序,在自己机子上就不能显示。
int main( int argc, char **argv )
{
………………
QApplication a( argc, argv );
char *string = "a中文按钮a";
printf("%s\n",string);
QTextCodec *gbk_codec = QTextCodec::codecForName("GBK");
//这个返回的是一个类型为 QTextCodec 指针(QTextCodec *)的变量,就是说gbk_codec是指针变量,地址也!!所以打印就是地址值了。
printf("%s\n",gbk_codec);
QString gbk_string = gbk_codec->toUnicode(string);
//gbk_string 是一个 QString 类型的变量 就相当于 int i =1;
printf("%s\n",&gbk_string);
//printf里面的参数类型应该是char * 而你给了一个参数不是char *的。
//第二 &gbk_string,应该是一个取地址值的操作,所以打印就当然是gbk_string的地址值咯
………………
}

不明白的地方,请查阅相关书籍。

以下这个在windows 200 qt4.1.0开源版通过,运行正常显示中文,希望对你有帮助
  1. #include <Qt/qapplication.h>
  2. #include <Qt/qtextcodec.h>
  3. #include <Qt/qpushbutton.h>
  4. int main( int argc, char *argv[] )
  5. {
  6.    QApplication a( argc, argv );
  7.    char *string = "a中文按钮a";
  8.    printf("%s\n",string);
  9.    QTextCodec *gbk_codec = QTextCodec::codecForName("GBK");
  10. //    printf("%s\n",gbk_codec);
  11.    QString gbk_string = gbk_codec->toUnicode(string);
  12. //    printf("%s\n",&gbk_string);
  13.    QPushButton quit( gbk_string,0 );
  14.    quit.resize( 100, 50 );
  15.    QObject::connect( &quit, SIGNAL(clicked()), &a, SLOT( quit()) );
  16.    //a.setMainWidget( &quit );
  17.    quit.show();
  18.    return a.exec();
  19. }
[ 此贴被浪漫天使在2006-05-29 00:47重新编辑 ]
快速回复
限100 字节
 
上一个 下一个