如何在QT中正确转义单引号和双引号?

时间:2019-05-01 10:23:05

标签: c++ qt

我正在尝试自定义QT中的滚动条,如下所示:

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 +'"' + ";"
            "})()";

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>\"); }\";})()"

因此,如果上面字符串中的函数在浏览器控制台中运行,则会显示以下错误:

  

未捕获的SyntaxError:无效或意外的令牌

有人可以帮助您如何在QT C ++中正确转义单引号/双引号吗?

2 个答案:

答案 0 :(得分:0)

用反斜杠转义引号:

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

打印:

He said: "awesome"

单引号也是如此。有关更多详细信息,请参见此table

如果您使用的是C ++ 11,则可以使用原始的string literals

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

答案 1 :(得分:0)

您只需要转义以防止字符串过早结束。

因此,在常规的双引号字符串中,您只需要转义反斜杠(始终),双引号(和换行符):

# e.g. Prerequisites /tmp/mypcap.pcap exists in some-mongo
# copy to host machine.
docker cp some-mongo:/tmp/mypcap.pcap C:¥tmp¥mypcap.pcap 
# mount mypcap.pcap directory.
docker run -it -v C:¥tmp:/opt/tcpdump nicolaka/netshoot tcpdump -qns 0 -X -r /opt/tcpdump/mypcap.pcap

在C ++中,单引号始终表示单个字符,因此唯一需要转义单引号的时间是是否表示字符

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";