我有一个嵌入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.
       }
   );


因此,即使这不能直接回答问题,这里介绍的内容也可以用来实现相同的效果。

10-04 14:27
查看更多