モジュールを構築QWebEngineView QStackedWidget QTabBar Webブラウザのフレーム(A)

A、レンダリング(ベースフレーム)
ここに画像を挿入説明
第二に、コード

#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();
}

第三に、要約
1、QWebEngineView * [仮想保護] QWebEngineView ::のcreateWindow(QWebEnginePage :: WebWindowTypeタイプ)
、このメソッドをオーバーライドオープンインタフェースカスタム達成するために
QTabBarが新しくオープンした各ページの管理と2、QStackedWidgetを
3に、サブクラスこうした対応するウェブページを閉じるなどのイベントに操作を完了するために、ダブルクリックしてQTabBar、

第四に、見通し
QWebEngineViewをダウンロードするにはネットワークリソースを使用する方法1.

公開された30元の記事 ウォンの賞賛1 ビュー1146

おすすめ

転載: blog.csdn.net/u010906468/article/details/104860003