我有一个嵌入Web浏览器(QWebEngineView
)的Qt应用程序。我想使用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片段?
最佳答案
因此,经过一些研究,我遇到了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.
}
);
因此,即使这不能直接回答问题,这里介绍的内容也可以用来实现相同的效果。