Qt网络引擎获取历史

Qt web engine get history

本文关键字:历史 获取 引擎 网络 Qt      更新时间:2023-10-16

我正在读一本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();
}

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

QWebEngineHistory* h = webview->history();

完全正确。因为您希望从web引擎(对象webview(中检索历史记录。

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

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