如何在QT中正确逃脱单引号和双引号

How to properly escape single and double quotes in QT?

本文关键字:单引号 逃脱 QT      更新时间:2023-10-16

我试图在qt中自定义scrollbar如下:

const QString name = "scrollbarIssue";
float btn_dimension = 8;
QString source = "::-webkit-scrollbar-button {height:"+ QString::number(btn_dimension) +"px; background: black; display: block;}"
                       "::-webkit-scrollbar-button:vertical:decrement { background-image: url("data:image/svg+xml;utf8,<svg xmlns=''http://www.w3.org/2000/svg'' width=''"+ QString::number(btn_dimension) +"'' height=''"+ QString::number(btn_dimension) +"'' fill=''%235a6268''><polygon points=''0,50 100,50 50,0''/></svg>"); }"
                       "::-webkit-scrollbar-button:vertical:increment { background-image: url("data:image/svg+xml;utf8,<svg xmlns=''http://www.w3.org/2000/svg'' width=''"+ QString::number(btn_dimension) +"'' height=''"+ QString::number(btn_dimension) +"'' fill=''%235a6268''><polygon points=''0,0 100,0 50,50''/></svg>"); }";

QString myFuncStr = "(function() {"
            "    css = document.createElement('style');"
            "    css.type = 'text/css';"
            "    css.id = '" + name + "';"
            "    document.head.appendChild(css);"
            "    css.innerText = "+ '"'+ source +'"' + ";"
            "})()";

in source 变量,我使用两个单语引号逃脱了单引号,我认为这可能会引起问题。

myfuncstr 包含值:

"(function() {    css = document.createElement('style');    css.type = 'text/css';    css.id = 'scrollbarIssue';    document.head.appendChild(css);    css.innerText = "::-webkit-scrollbar-button {height:8px; background: black; display: block;}::-webkit-scrollbar-button:vertical:decrement { background-image: url("data:image/svg+xml;utf8,<svg xmlns=''http://www.w3.org/2000/svg'' width=''8'' height=''8'' fill=''%235a6268''><polygon points=''0,50 100,50 50,0''/></svg>"); }::-webkit-scrollbar-button:vertical:increment { background-image: url("data:image/svg+xml;utf8,<svg xmlns=''http://www.w3.org/2000/svg'' width=''8'' height=''8'' fill=''%235a6268''><polygon points=''0,0 100,0 50,50''/></svg>"); }";})()"

因此,如果上面的字符串中的功能在浏览器控制台中运行,则会给出以下错误:

untured语法:无效或意外的令牌

任何人都可以帮助如何正确地逃脱QT C 中的单个/双引号?

逃脱带有后斜切的引号:

const auto example = QString("He said "awesome"");
qDebug() << example;

打印:

He said: "awesome"

同样的报价也是如此。有关更多详细信息,请参见此表。

如果您使用的是C 11,则可以使用原始字符串文字:

const auto example = R"He said "awesome"";

您只需要逃脱即可防止字符串的过早端。

因此,在常规的双引号字符串中,您只需要逃脱后斜线(始终(,双引号(和newline(:

QString str = "A string with a \ backslask, "double" and 'single' quotes";
// stackoverflow's code highlighting isn't sophisticated enough for this:
QString str = "A string 
spanning two code lines";

在C 单引号中总是代表一个字符,因此您唯一需要逃脱单引号的时间是,如果您是指 cartarat

char singleQuote = ''';