c++ - 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();
}
解决方案
我不是 Qt 的大专家。但我认为你的书在这种情况下有一个错误。你的第二种方法
QWebEngineHistory* h = webview->history();
完全正确。因为您想从 Web 引擎(对象webview
)中检索历史记录。
从Qt 文档 history()
来看是一个非静态函数。(这就是您的第一个代码产生指定错误的原因。)如果history()
是静态函数,它应该返回什么历史记录?它与 Web 视图没有任何连接。
编辑(由 scopchanov 要求):在qwebenginepage.h QWebEngineHistory
中仅前向声明,因此您需要#include <QWebEngineHistory>
访问items()
(或任何其他方法)。
推荐阅读
- vala - vala 初学者:如何访问 DBus 属性>
- jquery - 使用 jquery 选择和设置奇数组合项目的样式
- postgresql - Oracle 的 FLOAT(126) 的 PostgreSQL 等效项是什么?
- android - 更新 Firestore 中的文档
- python-3.x - 我想将 CustomerId 值分配给新局部变量中的 AccountId 值。我怎样才能做到这一点?
- kubernetes - Kubernetes 网络策略与外部服务
- android - 如何将 BottomNavigationView 与单一活动架构一起使用
- javascript - 修复“无法在未安装的组件上执行 React 状态更新”错误
- bash - 在 bash 中初始化变量
- node.js - 将 Express 应用程序拆分为多个文件会导致 500 服务器错误