QString转char*后乱码

jinling4388 2011-10-26 10:41:36
原来代码:
return "download success.";

运行后显示:download success.


现在改成:
return QObject::tr("download success.").toLatin1().data();

运行后显示为乱码,为什么?

因为要用Qt国际化翻译成其他语言,所以要放在tr中。
...全文
837 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2011-10-27
  • 打赏
  • 举报
回复
return QObject::tr("download success.").toLatin1().data();
上边都有人回答了,我也不好意思回答。你返回了一个出了作用域的指针(const char*)。

你为啥不直接返回一个QString呢?
blankc 2011-10-27
  • 打赏
  • 举报
回复
你返回了一个指向局部变量的指针,函数返回后局部变量析构了,指针指向未知数据
qq5823996 2011-10-27
  • 打赏
  • 举报
回复
return QObject::QString("download success.").toLocal8Bit().data();
不行我还有别的办法
我不是大明 2011-10-27
  • 打赏
  • 举报
回复
返回值不要用 char* 或 const char*,改成QString.


你返回了 char* 也行,在你用的时候转回来。

char* getText() {
return "ABC";
}

ff.setText(QString::fromLatin1(getText()));


mpfishere 2011-10-26
  • 打赏
  • 举报
回复
return tr("download success.").ToStdString().c_str();
jinling4388 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dbzhang800 的回复:]
这是C++中的基本问题。考虑下面的下面问题:


C/C++ code

char * func()
{
std::string abc = "Hello Qt5!";
return abc.c_str();
}
[/Quote]
什么意思?我原来可以用的,现在不知道为什么忽然就乱码了。我没加翻译文件呢!用英文的也乱码了。
dbzhang800 2011-10-26
  • 打赏
  • 举报
回复
这是C++中的基本问题。考虑下面的下面问题:

char * func() 
{
std::string abc = "Hello Qt5!";
return abc.c_str();
}
Lutx 2011-10-26
  • 打赏
  • 举报
回复
常见问题
碎炎 2011-10-26
  • 打赏
  • 举报
回复
QString在作用域结束后析构了 指针指向了不确定区域
dbzhang800 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jinling4388 的回复:]

问题是我用QObject::tr.toLatin1().data()的方法原来转换没有问题的,都能正常显示,现在又忽然出现乱码了。前几天一直都正常的,今天忽然变的不正常了
[/Quote]
呵呵,这只能说明你前几天运气太不好了,而不能说明代码没有问题。

如果你还看不出问题,不妨放下Qt,先去补补C++的课:变量作用域、临时变量、野指针、...等等

题外:
Qt只是C++的库,而你遇到这个是C++比较常规的问题,和Qt没什么关系。
jinling4388 2011-10-26
  • 打赏
  • 举报
回复
问题是我用QObject::tr.toLatin1().data()的方法原来转换没有问题的,都能正常显示,现在又忽然出现乱码了。前几天一直都正常的,今天忽然变的不正常了
dbzhang800 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jinling4388 的回复:]

引用 3 楼 mpfishere 的回复:
return tr("download success.").ToStdString().c_str();


我试过了,还是乱码了。乱码类似:þîþîþîþîþîþîþîþîþîþîþî
[/Quote]
你不能先看看我1楼给的C++代码,然后想想它有什么原则性的严重错误么?
jinling4388 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mpfishere 的回复:]
return tr("download success.").ToStdString().c_str();
[/Quote]

我试过了,还是乱码了。乱码类似:þîþîþîþîþîþîþîþîþîþîþî
jinling4388 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mpfishere 的回复:]
return tr("download success.").ToStdString().c_str();
[/Quote]

多谢!

回复4楼:
我的问题是为什么乱码,而不是怎么转换?
dbzhang800 2011-10-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jinling4388 的回复:]

引用 1 楼 dbzhang800 的回复:
这是C++中的基本问题。考虑下面的下面问题:


C/C++ code

char * func()
{
std::string abc = "Hello Qt5!";
return abc.c_str();
}

什么意思?我原来可以用的,现在不知道为什么忽然就乱码了。我没加翻译文件呢!用英文的也乱码了。
[/Quote]
先补补C++课吧

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧