开发环境: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
#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里就可以了。
效果: