我有一个嵌入网络浏览器的Qt应用程序(QWebEngineView
)。我想用C ++应用程序中的字符串参数调用javascript函数。这样做的方法是调用
page()->runJavaScript("setContent(\"hello\");");
这适用于简单的情况。但是,如果我尝试加载一个C ++源文件并将其用作setContent
的参数,那么这将会中断,因为我不能像这样组装字符串:
auto js = QString("setContent(\"%1\");").arg(fileStr);
我尝试了以下内容:
fileStr = fileStr.replace('"', "\\\"");
fileStr = fileStr.replace("\n", "\\n");
但显然这无法逃脱字符串,我在调用此javascript时出错。如何通过换行符和可能的特殊字符来普遍地转义长字符串,以便我可以像这样构造一个有效的js片段?
答案 0 :(得分:0)
因此,经过一些研究,我遇到了QWebChannel,它用于应用程序和托管网页之间的双向通信。可以在示例中找到导入的qwebchannel.js here。从那里,这就是我做的:
在C ++中:
auto channel = new QWebChannel(this);
page()->setWebChannel(channel);
channel->registerObject("doc", Doc);
在HTML / JS中:
new QWebChannel(qt.webChannelTransport,
function(channel) {
var doc = channel.objects.doc; // this is "doc" from the registerObject call
editor.setValue(doc.text);
doc.textChanged.connect(updateText); // textChanged is a signal of the class of doc.
}
);
所以,尽管这并没有直接回答这个问题,但这里提供的内容可以用来达到同样的效果。