1

我想提取标签information中的=>b123456789

这是 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());
        }
}

我有一个带有 Button( call update) 和 a的表单LineEdit,所以如果我点击update按钮,LineEdit应该会自动设置文本123456789。但是我的代码不起作用。文本LineEdit仍然为空。

我包括这个:

#include <QtWebKit>
#include <QtWebKitWidgets/QWebFrame>
#include <QWebView>

QT file.pro 是:

QT += core gui
QT += network
QT += webkit
QT += webkitwidgets
4

1 回答 1

1

如前所述,您需要确保等待足够长的时间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()方法中你只加载页面(如果你需要的话,显示webview)

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());
    }

}

让我知道这是否有帮助。

于 2015-04-18T18:22:37.770 回答