Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 没有QWebPage的QWebElement或QWebFrame_C++_Html_Qt_Parsing_Qwebelement - Fatal编程技术网

C++ 没有QWebPage的QWebElement或QWebFrame

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

我在一个线程(不是主线程)中收到一个HTML页面。我想使用QWebElement提供的HTML解析,但为此我需要QWebPage。由于QWebPage正在创建小部件,因此无法在不同的线程中创建,我该如何做我想做的事情

这是我的尝试,但它不起作用

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