代码之家  ›  专栏  ›  技术社区  ›  Raffaele Rossi

Qt web引擎获取历史记录

  •  2
  • Raffaele Rossi  · 技术社区  · 6 年前

    我正在读一本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();
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Benjamin J.    6 年前

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

    QWebEngineHistory* h = webview->history();
    

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

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

    编辑(由scopchanov请求): qwebenginepage.h网站 QWebEngineHistory 只有forward声明,因此您需要 #include <QWebEngineHistory> 进入 items() (或其他方法)。