在我的Qt项目中,我想在QWebView中找到文本内容。我尝试过QWebElement方法,但失败了。
我的HTML是:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>nothing</title>
<style>
input[type=text] { font-size:15px; width:200; background:#ccc}
</style>
</head>
<p> hello </p>
<body>
<input type='text' name='hello' value='good luck'/>
</body>
</html>
现在,我想编辑这个html,例如,我希望文本显示“hello,qt”。我的代码是:
QWebView * webView = new QWebView();
webView->load(QUrl::fromLocalFile("C:\\Users\\zhq\\Desktop\\QT_VTK_MIP\\qt.html"));
QWebElement document = webView->page()->currentFrame()->documentElement();
QWebElement firstTextInput = document.findFirst("input[type=text]");
QString storedText = firstTextInput.attribute("value");
firstTextInput.setAttribute("value",QString("hello,qt"));
webView->show();
但是,html可以通过QWebView正常显示,但文本内容未被修改为“hello,qt”。
调试代码后,我发现findFirst函数返回NULL值。那么,findFirst函数有什么问题。
而且,如果html中存在多个文本怎么办?如何使用文本名称来识别我实际需要的内容?
任何建议对我来说意义重大。提前谢谢。
ZHQ
答案 0 :(得分:1)
首先,我想说代码没问题。当然,结果真的让我感到困惑。
使代码无效的原因是&#34; QWebView使用asynchrone组件,因此网页加载是make throw eventloop执行。&#34;这意味着qwebview实际上并没有在qwebview :: load函数之后加载html。
首先,html通常显示在qwidget中。我在qwidget中添加了一个按钮。当我单击按钮时,我更改了插槽功能中的文本内容,并且它有效。
ZHQ