如何从QString获取const char *

6
我已经从一个使用UTF8编码的XML文件中读取了一段字符串。我将这个值存储在一个对象中,并将其与其他信息连接起来。我可以在QtCreator调试器中看到包含了期望的值。
我需要将此字符串传递给另一个库,该库需要一个参数。请问如何获得?我尝试过toLocal8bit()、toLatin1()、toUtf8()等方法,都没有成功。似乎我漏掉了什么...

https://dev59.com/BW855IYBdhLWcg3wp2R0 - Min Lin
@MinLin:那个线程是关于std string的,不是const char*。 - László Papp
@LaszloPapp 好的,在答案中,rvalue 是 const char*,只是隐式转换为 lvalue,而后者是 std string。 - Min Lin
@MinLin:在我看来,std::string和QString不应该混用,因为这是没有必要的。因此,这是一个不同的用例,需要提出不同的问题。最好不要混合使用std类型和qt类型。请参考下面的答案。 - László Papp
@LaszloPapp,你的回答是正确的。我的意思是,在那篇文章中,虽然它需要一个std字符串,但右侧是一个const char*,我认为那篇文章的读者应该能够理解。 - Min Lin
可能是QString转char*的重复问题 - Ben Jones
1个回答

10
我需要将此字符串传递给另一个库,该库使用const char*参数。请问如何获得const char*?我已尝试toLocal8bit(),toLatin1()和toUtf8(),但都没有成功。似乎我遗漏了什么...
因为如果您尝试这些方法,您只会得到一个QByteArray而不是const char*。您可以在通过此方式获取的QByteArray上使用constData()方法,然后就会得到所需的结果。
混合std :: string和QString并不必要,因此最好通过qt类型(QString-> QByteArray-> const char*)进行操作,而不引入std :: string。

当你使用 toLocal8bit()toLatin1() 或者 toUtf8() 时,取决于你的编码方式,因此这是一个不同于主题的问题。它们都会返回一个 QByteArray

注意:应该避免使用 toAscii(),因为在Qt 5中已经被弃用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接