• 10358阅读
  • 12回复

在WINDOWS把QString转换为*char啊? [复制链接]

上一主题 下一主题
离线wangbenqq
 

只看楼主 正序阅读 楼主  发表于: 2008-06-05
— 本帖被 XChinux 执行加亮操作(2008-06-05) —
我在WINDOWS下用QString path;……这里的path是一个路径
const char *oldpath = path.toLocal8Bit().data();
把QString转换为*char
但是我调试的时候,发现oldpath的值是一堆“铪铪铪”;不是我想要的

这是为什么呢?我在LINUX下转换的挺好的啊,但是到了WINDOWS下就出现了这样的问题

有哪位高手会啊??
请指点一下??
离线goldroc

只看该作者 12楼 发表于: 2008-06-27
QString::toLocal8Bit()::data() 返回的是一个临时对象QByteArray的内部存储的指针。此指针只在QByteArray 对象有效时有效。
离线wangbenqq

只看该作者 11楼 发表于: 2008-06-27
哈哈,谢谢捧场
离线kmax
只看该作者 10楼 发表于: 2008-06-13
七楼的是正确的解决方法..呵呵,官方的文档有一个注意,专门说到的,必须分两步!否则你调用data()之前,QByteArray 就已经析构了..

个人觉得这样的问题是QT的设计不好

你还可以使用更方便的一个东东..啊哈哈:
#include <QtGlobal>
const char * qPrintable ( const QString & str )

这里有详细的解答,为什么会这样

http://troll.no/developer/knowledgebase/faq.2007-01-30.9032238253/?searchterm=qstring
[ 此贴被kmax在2008-06-13 19:15重新编辑 ]
QT 4.4.0  Win XP
离线mc99
只看该作者 9楼 发表于: 2008-06-13
QString str;
(char*)str.toStdString().c_str();
离线steinlee

只看该作者 8楼 发表于: 2008-06-07
A simple one:

  QString str( "change" );

  const char * new_str = qPrintable( str );
Looking for remote C/C++ and Qt 兼职
离线wangbenqq

只看该作者 7楼 发表于: 2008-06-06
哈哈,问题解决了
总结一下:
1:QString转换为 char*,不知道为什么,在WINDOWS下,const char *oldpath = path.toLocal8Bit().data();这样就转换不了。必须分开来进行
QByteArray ba1 = path1.toLocal8Bit();
const char *oldpath= ba1.data();
这样就转换成功了,我也不清楚是为什么。
2:在WINDOWS下分隔符的问题,它和LILNUX下是不一样的,一个是“/”一个是“\”,用QDir::toNativeSeparators(path)转换就可以了,这样就成功了。
呵呵,还有我犯了一个低级错误就是文件还没有close我就调用rename,这样怎么都改不了,要先close才可以,

唉!弄了差不多一上午的时间,呵呵!还好算是解决了。
离线XChinux

只看该作者 6楼 发表于: 2008-06-06
使用QDir类提供的方法进行转换(目录分隔符)
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线wangbenqq

只看该作者 5楼 发表于: 2008-06-06
有人会么?
自己顶
离线wangbenqq

只看该作者 4楼 发表于: 2008-06-06
斑主,还想请问你一个问题:我想在WINDOWS下使用rename() 这个函数
但是在QT中路径是用"/"隔开的,但是WINDOWS下是用“\”隔开的。
我把QString 里的"/"全部换成了"\"。然后又转换成了char *。
但是在使用rename的时候,rename调用总是失败
这个要怎么转换呢??
离线XChinux

只看该作者 3楼 发表于: 2008-06-05
你的Windows中使用的是GBK编码吧,而QString默认是使用的UTF-8,所以你看到的是乱码。
先在论坛里搜索一下关于字符集的帖子,就会知道答案的。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ldqiang
只看该作者 2楼 发表于: 2008-06-05
等高人指点,呵呵,期待中。。。。
离线wangbenqq

只看该作者 1楼 发表于: 2008-06-05
而且我也尝试了const char *p = qstr.toStdString().data();
也不行啊?这样转换过来的什么都没有
怎么办呢???
快速回复
限100 字节
 
上一个 下一个