引用第3楼dbzhang800于2010-08-09 10:10发表的 :
尽管你的问题解决了,但你的结论很可能错了,play 接受的是QString,而QString内部是Unicode编码。你的问题出在对编码的认识上,比如:送给QString的字符串本身就是错的(国内很多人都会这么写: QString str="中文";,却不知道自己究竟在做什么 )
不当请指正

谢谢。
我想我这边指的UTF-8和unicode是不一样的。
尽管QString内部是Unicode编码的,但是不同的locale下,其编码是不一样的。
因为需要支持中文界面和中文字符串处理,我在main()中加入了
QTextCodec *codec = QTextCodec::codecForName("GBK");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
在这种情况下,QString str="中文"的编码和locale为UTF-8设置下的编码是不一样的。
由于我设置的locale是GBK,无论我传什么样编码的中文字符进去,QSound::play(QString str)都不能正确decode出中文字符
貌似目前的QSound::play(QString str)只能正确识别UTF-8下编码的中文字符。
我想这是linux下play()函数实现的问题。
我个人觉得如果修改linux下play()函数的实现,肯定可以和windows下一样,不需要额外重新设置locale而避免这个问题的。
我个人觉得我们不太需要关心送给QString的字符串究竟是什么样的数据。只要大环境设好了,我传给QSound::play()的是str="中文",
那么它就应该正确解释出str="中文"而不是其它的。至于这个字符串内部是怎么编码的,对于我来说应该是透明的,我并不需要关心,因为locale是唯一的。所以我觉得是linux下play()函数实现的问题。
[ 此帖被hasitate在2010-08-12 13:28重新编辑 ]