QT-C++:如何为QString添加双引号,构造指定格式字符串
解决Qt中构造带双引号变量的字符串问题
你之前的写法确实踩了Qt字符串拼接里的两个常见小坑,我来帮你梳理清楚问题所在,再给你几个靠谱的解决方案:
问题分析
你的第一次尝试:
QString str = "<page pageIndex = " + myVar + ">";这里的问题在于,字符串中的双引号没有转义,编译器会把
<page pageIndex =后面的双引号当成字符串的结束标记,剩下的代码直接变成语法错误。第二次尝试:
QString str = "<page pageIndex = " + '"' + myVar + '"' + ">";这里的问题是:
"<page pageIndex = "是C风格的const char*字符串,而'"'是单个char类型,C++里const char* + char会被当成指针偏移运算,而不是字符串拼接,这就会导致非法内存访问或者编译错误,根本达不到你想要的效果。
推荐解决方案
方案1:使用QString的arg()方法(最推荐)
Qt的QString提供了非常方便的arg()格式化方法,不仅能自动处理变量类型转换,还能避免拼接时的各种问题,写法也更清晰:
// 假设myVar是QString类型,如果是int等其他类型也可以直接用arg()转换 QString str = QString("<page pageIndex = \"%1\">").arg(myVar);
如果你的编译器支持C++11及以上,还可以用原始字符串字面量,不用转义双引号,可读性更好:
QString str = QString(R"(<page pageIndex = "%1">)").arg(myVar);
方案2:正确的字符串拼接方式
如果你一定要用拼接的方式,需要把单个双引号字符转换成QString类型,这样才能触发QString的重载+操作符完成拼接:
QString str = "<page pageIndex = " + QString("\"") + myVar + QString("\"") + ">";
或者用QChar来构造:
QString str = "<page pageIndex = " + QString(QChar('"')) + myVar + QString(QChar('"')) + ">";
方案3:直接转义双引号拼接
如果myVar是QString类型,也可以直接转义双引号后拼接,写法更简洁:
QString str = "<page pageIndex = \"" + myVar + "\">";
要是myVar是int等数值类型,记得先转成QString再拼接,比如用QString::number(myVar)。
内容的提问来源于stack exchange,提问作者Ale
相关产品推荐
相关产品推荐

