我想提取b
标签中的information
=> 123456789
这是 HTML 源代码:
<body>
<div>
<table>
<tbody>
<tr>
<td class="myclass">
<b>123456789</b>
</td>
</tr>
</tbody>
</table>
</div>
</body>
所以,我试了这个:
void My_Test_Dialog::on_pushButton_clicked()
{
QWebView *webview = new QWebView(parentWidget());
webview->load(QUrl("http://www.esesese.com"));
webview->show();
// get HTML element information
QWebElementCollection colls = webview->page()->mainFrame()->findAllElements("td.myclass b");
foreach(QWebElement elemento, colls)
{
ui->lineEdit_data->setText(elemento.toInnerXml());
}
}
我有一个带有按钮(call update
)和LineEdit
的表单,因此,如果我单击update
按钮,LineEdit
应该会自动设置文本123456789
。但是我的代码不起作用。LineEdit
的文本仍为空。
我包括这个:
#include <QtWebKit>
#include <QtWebKitWidgets/QWebFrame>
#include <QWebView>
QT file.pro 是 :
QT += core gui
QT += network
QT += webkit
QT += webkitwidgets
如前所述,您需要确保等待足够长的时间才能加载QWebView
中的数据。
你可以用这样的东西来做到这一点(非常简单):
将 webView 定义为对话框类的一部分,并声明一个槽,以后可以连接到 Web 视图的信号
class My_Test_Dialog
{
public slots:
// slot to read your data once you are finished
void readPage(bool ok);
// whatever else you did
private:
QWebView *webView;
}
然后,例如在构造函数或其他地方,您可以创建 webView 并将其loadFinished()
信号连接到上面类定义中显示的readPage()
槽
// create QWebview and connect its loadFinished signal to our slot
webView = new QWebView(this);
QObject::connect(webView,SIGNAL(loadFinished(bool)), this, SLOT( readPage(bool) ) );
然后在您的on_pushButton_clicked()
方法中,您只加载页面(如果需要,则显示 Web 视图)
void My_Test_Dialog::on_pushButton_clicked()
{
webView->load(QUrl("http://www.esesese.com"));
}
然后一旦对话框完成加载,插槽readData()
将自动调用,在那里您可以简单地执行读取操作
void MyDialog::readPage(bool ok)
{
// get HTML element information
QWebElementCollection colls = webView->page()->mainFrame()->findAllElements("td.myclass b");
foreach(QWebElement elemento, colls)
{
lineEdit->setText(elemento.toInnerXml());
}
}
让我知道这是否有帮助。