0

在我的 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();

但是通过QWebView可以正常显示html,但是文本内容并没有被修改为“hello, qt”。

调试代码后,我发现 findFirst 函数返回 NULL 值。那么,findFirst 函数有什么问题。

而且,如果 html 中存在多个文本怎么办?如何使用文本名称来识别我真正需要的内容?

任何建议对我来说都意义重大。提前致谢。

浙青

4

1 回答 1

1

首先,我想说代码没问题。当然,结果真的让我很困惑。

make代码不起作用的原因是“QWebView使用异步组件,所以网页加载是make throw eventloop执行”。这意味着 qwebview 在 qwebview::load 函数之后实际上并没有加载 html。

首先,html在qwidget中正常显示。我在 qwidget 中添加了一个按钮。当我单击按钮时,我更改了 slot 函数中的文本内容,并且它起作用了。

zhq

于 2016-12-31T07:58:46.697 回答