QWebEngineView QStackedWidget QTabBar web browser frame constructing module (a)

A, renderings (base frame)
Here Insert Picture Description
Second, the code

#include "webviewwindow.h"
#include "ui_webviewwindow.h"

WebViewWindow::WebViewWindow(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::WebViewWindow)
{
    ui->setupUi(this);
    showMaximized();
    ui->lineEdit->setPlaceholderText(QString::fromLocal8Bit("请输入Url"));
    ui->lineEdit_2->setPlaceholderText(QString::fromLocal8Bit("请输入搜索内容"));
    bar = new TabBar(ui->widget);
    ui->horizontalLayout_2->addWidget(bar);
    ui->horizontalLayout_2->addStretch();
    connect(ui->lineEdit,&QLineEdit::returnPressed,this,[=](){
        openUrl(ui->lineEdit->text());
    });
    connect(ui->lineEdit_2,&QLineEdit::returnPressed,this,[=](){
        openUrl(QString("https://www.baidu.com/s?wd=%1&tn=87048150_dg&ie=utf8").arg(ui->lineEdit_2->text()));

    });
    connect(bar,&TabBar::tabBarClicked,this,[=](int index){
        ui->stackedWidget->setCurrentIndex(index);
    });
    connect(bar,&TabBar::doubleClick,this,[=](QPoint pos){
        int index = bar->tabAt(pos);
        bar->removeTab(index);
        ui->stackedWidget->removeWidget(ui->stackedWidget->widget(index));

    });
    bar->setStyleSheet("QTabBar::tab:!selected{width:140px;height:20px;background:rgb(240,240,240);font:12px;text-align:left;}"
                       "QTabBar::tab:selected{width:140px;height:20px;background:rgb(240,240,240);color:blue;font:12px;border:2px solid blue; text-align:left;}");

}
WebViewWindow::~WebViewWindow()
{
    delete ui;
}
void WebViewWindow::openUrl(QString url)
{
    WEBengineView *pwebview = new WEBengineView;
    connect(pwebview,&WEBengineView::create_view,this,&WebViewWindow::on_create_view);
    connect(pwebview,&WEBengineView::titleChanged,this,&WebViewWindow::on_titleChanged);
    ui->stackedWidget->addWidget(pwebview);
    bar->addTab("");
    bar->setCurrentIndex(bar->count()-1);
    ui->stackedWidget->setCurrentIndex(bar->count()-1);
    pwebview->load(QUrl(url));
    pwebview->show();
}

void WebViewWindow::on_create_view(WEBengineView *pview)
{
    connect(pview,&WEBengineView::create_view,this,&WebViewWindow::on_create_view);
    connect(pview,&WEBengineView::titleChanged,this,&WebViewWindow::on_titleChanged);
    bar->addTab(pview->title());
    ui->stackedWidget->addWidget(pview);
    ui->stackedWidget->setCurrentIndex(ui->stackedWidget->count()-1);
    bar->setCurrentIndex(bar->count()-1);
}
void WebViewWindow::on_titleChanged(QString title)
{
    WEBengineView * pwebview  = static_cast<WEBengineView *>(sender());
    int index = ui->stackedWidget->indexOf(pwebview);
    bar->setTabText(index,title);
}

void WebViewWindow::on_pushButton_3_clicked()
{
    openUrl("https://www.baidu.com");
}

void WebViewWindow::on_pushButton_clicked()
{
    int index = bar->currentIndex();
    WEBengineView * pwebview  = static_cast<WEBengineView *>(ui->stackedWidget->widget(index));
    pwebview->back();
}

void WebViewWindow::on_pushButton_2_clicked()
{
    int index = bar->currentIndex();
    WEBengineView * pwebview  = static_cast<WEBengineView *>(ui->stackedWidget->widget(index));
    pwebview->reload();
}

Third, the summary
1, [virtual protected] QWebEngineView * QWebEngineView :: createWindow (QWebEnginePage :: WebWindowType type)
override this method, to achieve a custom interface Open
2, QStackedWidget with each page management QTabBar newly opened
3, subclass QTabBar, double-click to complete the operation on event such as closing the corresponding web page

Fourth, the outlook
1. How to use network resources to download QWebEngineView

Published 30 original articles · won praise 1 · views 1146

Guess you like

Origin blog.csdn.net/u010906468/article/details/104860003