我正在尝试自定义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 ++中正确转义单引号/双引号吗?
答案 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";