首页 > 解决方案 > Qt web 引擎获取历史

问题描述

我正在读一本 Qt 书,可能不太好,这给我带来了一些麻烦。我需要从QWebEngineView* webview;我在本书之后编写的这段代码中获取历史记录:

 QWebEngineHistory* h = QWebEnginePage::history();

这就是我应该如何检索历史记录,然后我可以使用h->items();. 问题是上面的代码产生

调用没有对象参数的非静态成员函数

我怎样才能解决这个问题?我需要获取导航页面的历史记录


然后我试过这个

QWebEngineHistory* h = webview->history();

但现在我不能打电话了h->items()。我怎样才能解决这个问题?我需要访问items().

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWebEngineView>
#include <QWebEnginePage>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow() override;
    virtual void paintEvent(QPaintEvent* event) override;

private slots:
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_clicked();
    void on_pushButton_4_clicked();
    void on_url_input_returnPressed();
    void on_pushButton_5_clicked();
    void on_pushButton_7_clicked();

    void on_pushButton_6_clicked();

private:
    Ui::MainWindow *ui;
    QWebEngineView* webview;
    void loadPage() const;
};

#endif // MAINWINDOW_H

执行

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow) {

    ui->setupUi(this);

    webview = new QWebEngineView(ui->webViewFrame);
    loadPage();
}

MainWindow::~MainWindow() {
    delete ui;
}

void MainWindow::on_pushButton_2_clicked() {
    webview->back();
}

void MainWindow::on_pushButton_3_clicked() {
    webview->forward();
}

void MainWindow::on_pushButton_clicked() {
    webview->reload();
}

void MainWindow::on_pushButton_4_clicked() {
    loadPage();
}

void MainWindow::loadPage() const {
    QString url = ui->url_input->text();

    if (url.length() == 0)
        url = "http://www.google.it";

    if (!url.startsWith("http://") && !url.startsWith("https://"))
        url = "http://" + url;

    ui->url_input->setText(url);
    ui->listWidget->addItem(url);
    webview->load(QUrl(url));
}

void MainWindow::on_url_input_returnPressed() {
    loadPage();
}

void MainWindow::paintEvent(QPaintEvent* event) {
    QMainWindow::paintEvent(event);
    webview->resize(ui->webViewFrame->size());
}

void MainWindow::on_pushButton_5_clicked() {
    QWebEngineHistory* h = webview->history();
    auto x = h->items(); //error here!!

    ui->stackedWidget->setCurrentIndex(0);
}

void MainWindow::on_pushButton_7_clicked() {
    ui->stackedWidget->setCurrentIndex(1);
}

void MainWindow::on_pushButton_6_clicked() {
    ui->listWidget->clear();
}

标签: c++qt

解决方案


我不是 Qt 的大专家。但我认为你的书在这种情况下有一个错误。你的第二种方法

QWebEngineHistory* h = webview->history();

完全正确。因为您想从 Web 引擎(对象webview)中检索历史记录。

Qt 文档 history()来看是一个非静态函数。(这就是您的第一个代码产生指定错误的原因。)如果history()是静态函数,它应该返回什么历史记录?它与 Web 视图没有任何连接。

编辑(由 scopchanov 要求):qwebenginepage.h QWebEngineHistory中仅前向声明,因此您需要#include <QWebEngineHistory>访问items()(或任何其他方法)。


推荐阅读