C++ 没有QWebPage的QWebElement或QWebFrame
我在一个线程(不是主线程)中收到一个HTML页面。我想使用QWebElement提供的HTML解析,但为此我需要QWebPage。由于QWebPage正在创建小部件,因此无法在不同的线程中创建,我该如何做我想做的事情 这是我的尝试,但它不起作用C++ 没有QWebPage的QWebElement或QWebFrame,c++,html,qt,parsing,qwebelement,C++,Html,Qt,Parsing,Qwebelement,我在一个线程(不是主线程)中收到一个HTML页面。我想使用QWebElement提供的HTML解析,但为此我需要QWebPage。由于QWebPage正在创建小部件,因此无法在不同的线程中创建,我该如何做我想做的事情 这是我的尝试,但它不起作用 QString content = "<body><div id="hsearch"><form id="search" action="/search" method="get"><div><inp
QString content = "<body><div id="hsearch"><form id="search" action="/search" method="get"><div><input name="q" class="textbox" tabindex="1" type="text" maxlength="140" size="28" value="search"></div></form></div><br class="cbt"><div id="hlogo"><a href="/">Stack Overflow</a></div></body>"; // Ignore the quotes and stuff, content is actually retrieved via QNetworkAccessManager
QWebElement docElement;
docElement.setPlainText(content);
QString stackLogoText = docElement.findFirst("a").toInnerXml; // Should return Stack Overflow
QString content=“
”;//忽略引号和内容,内容实际上是通过QNetworkAccessManager检索的
QWebElement文档元素;
docElement.setPlainText(内容);
QString stackLogoText=docElement.findFirst(“a”).toInnerXml;//应该返回堆栈溢出
但它不起作用-只返回一个空字符串。我还尝试了setOuterXml()
和setInnerXML()
有什么想法吗?查看信号和插槽。您应该能够跨线程连接一个插槽,以便将内容从
QNetworkAccessManager
提供给您的QWebPage
QWebPage由多个线程访问,因此这不是一个好主意:(为什么不呢?在初始化内容的过程中,您可能需要一些关键部分或屏障,但默认情况下,connect
是线程安全的。我不是说connect(),但将有大约5个线程同时运行,每个线程都试图在QWebPage中设置主框架的HTML…我是线程新手,请告诉我是否可以按照您提到的方式使其工作?基本上,关键部分是一个序列点,您可以在其中锁定访问。因此,第一个线程其他代码等待接触特定的非线程安全代码位。这样它们就不会相互覆盖或导致问题。例如,检查QMutex
和QMutexLocker