【QT】QWebEngineView实现简易浏览器

开发环境:ubuntu16.04 、QT5.6.3

布局

直接使用QWebEngineView,点击链接后无反应,需重载QWebEngineView类中的createWindow函数,

return this会在本页面打开

mywebview.h

#ifndef MYWEBVIEW_H
#define MYWEBVIEW_H

#include <QWebEngineView>
namespace Ui {

class mywebview;
}

class mywebview: public QWebEngineView
{
    Q_OBJECT
public:
    explicit mywebview(QWidget *parent = nullptr);

protected:
    QWebEngineView *createWindow(QWebEnginePage::WebWindowType);
};

#endif // MYWEBVIEW_H

mywebview.cpp

#include "mywebview.h"

mywebview::mywebview(QWidget *parent): QWebEngineView(parent)
{

}

QWebEngineView *mywebview::createWindow(QWebEnginePage::WebWindowType)
{
    return this;
}

跳转、刷新、前进、后退、链接进入

 mainwindow.h

扫描二维码关注公众号,回复: 10694728 查看本文章
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


#include "mywebview.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void slotLoadFinished();

private slots:
    void on_pushButton_goto_clicked();

    void on_pushButton_refresh_clicked();

    void on_pushButton_forward_clicked();

    void on_pushButton_back_clicked();

private:
    Ui::MainWindow *ui;
    mywebview *m_webView;
};

#endif // MAINWINDOW_H

 mainwindow.cpp

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

#include <QStackedLayout>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_webView = new mywebview(this);
    QStackedLayout* layout = new QStackedLayout(ui->frame);
    ui->frame->setLayout(layout);
    layout->addWidget(m_webView);
    m_webView->load(QUrl("http://www.baidu.com"));

    connect(m_webView, &QWebEngineView::loadFinished, this, &MainWindow::slotLoadFinished);
}

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

//跳转
void MainWindow::on_pushButton_goto_clicked()
{
    QString surl = ui->lineEdit->text();
    if(surl.indexOf("://")==-1){
        surl = "http://" + surl;
        ui->lineEdit->setText(surl);
    }
    m_webView->load(QUrl(surl));
}
//刷新
void MainWindow::on_pushButton_refresh_clicked()
{
    m_webView->page()->triggerAction(QWebEnginePage::Reload);
}
//前进
void MainWindow::on_pushButton_forward_clicked()
{
    m_webView->page()->triggerAction(QWebEnginePage::Forward);
}
//后退
void MainWindow::on_pushButton_back_clicked()
{
    m_webView->page()->triggerAction(QWebEnginePage::Back);
}

void MainWindow::slotLoadFinished()
{
    setWindowTitle(m_webView->title());
    ui->lineEdit->setText(m_webView->url().toString());
}

     点击进入链接后不能退回上一页,可以结合QTabWidget,把所有view用tab管理起来,createWindow的时候,发送一个signal给主窗口,主窗口把new的view都放进tab里就可以了。

效果:

发布了64 篇原创文章 · 获赞 82 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_40602000/article/details/104620608