QWebEngine

Qt自带的QWebEngine 不支持播放MP4, 需要手动编译QWebEngine模块

不支持播放mp4

cpp 复制代码
// mainwindow.cpp
, m_webEngine(new MyWebEngine(this))
void MainWindow::init()
{   //关闭系统代理,提高速度,采用release会更快
    QNetworkProxyFactory::setUseSystemConfiguration(false);
    setCentralWidget(m_webEngine);
}
cpp 复制代码
// mywebengine.h
#include <QWebEngineView>
#include <QWebEnginePage>

class QUrl;
class WebView : public QWebEngineView
{
    Q_OBJECT
public:
    explicit WebView(QWidget *parent = nullptr);
protected:
    QWebEngineView* createWindow(QWebEnginePage::WebWindowType type) override;
private:
    void initControl();
private:
    QUrl	url;
};

class MyWebEngine: public QWidget{
    Q_OBJECT
public:
    explicit MyWebEngine(QWidget*parent = nullptr);
};
#endif // MYWEBENGINE_H
cpp 复制代码
// mywebengine.cpp
#include "mywebengine.h"
#include <QWebEngineFullScreenRequest>
#include <QWebEngineSettings>
#include <QWebEngineView>
#include <QLineEdit>
#include <QToolButton>
#include <QBoxLayout>

WebView::WebView(QWidget *parent)
{
    setAttribute(Qt::WA_DeleteOnClose);
    settings()->setAttribute(QWebEngineSettings::FullScreenSupportEnabled,true);
    initControl();
}

QWebEngineView *WebView::createWindow(QWebEnginePage::WebWindowType) {
    load(url);
    return nullptr;
}

void WebView::initControl()
{
    connect(page(), &QWebEnginePage::linkHovered, this,
        [=](const QString &u){url.setUrl(u);
    });
    connect(page(),&QWebEnginePage::fullScreenRequested,this,
        [=](QWebEngineFullScreenRequest pageRequeset) {
            pageRequeset.accept();
    });
}

MyWebEngine::MyWebEngine(QWidget *parent)
{
    auto vlayout = new QVBoxLayout(this);
    auto layout = new QHBoxLayout(this);
    auto *back = new QToolButton(this);    back->setText("<");
    auto *forword = new QToolButton(this); forword->setText(">");
    auto *reload = new QToolButton(this);  reload->setText("刷新");
    auto *go = new QToolButton(this);      go->setText("Go");
    auto *input = new QLineEdit(this);
    input->setClearButtonEnabled(true);
    input->setText("https://www.baidu.com");
    auto *view = new WebView(this);

    setStyleSheet(R"(QToolButton,QLineEdit{height:30px;border-radius:2px;}
QLineEdit{font-size:14px;padding:0 0 0 8; border:none;border-radius:13px;}
QToolButton:hover,QLineEdit:hover{border:1px solid #4999FA;background-color:#DDEEFF}
)");
    layout->addWidget(back);
    layout->addWidget(forword);
    layout->addWidget(reload);
    layout->addWidget(input);
    layout->addWidget(go);
    layout->setContentsMargins(0,0,0,0);
    layout->setSpacing(0);
    vlayout->setContentsMargins(0,0,0,0);
    vlayout->setSpacing(0);

    vlayout->addLayout(layout);
    vlayout->addWidget(view);

    connect(forword,&QToolButton::clicked,view,&QWebEngineView::forward);
    connect(back,&QToolButton::clicked,view,&QWebEngineView::back);
    connect(reload,&QToolButton::clicked,view,&QWebEngineView::reload);
    connect(go,&QToolButton::pressed,this,[=](){
        auto url = input->text().trimmed();
        // if(!url.contains("www")) url = "www."+url;
        if(!url.contains("http"))url = "https://"+url;
        // qDebug()<< "url:" << url;
        input->setText(url);
        view->load(url);
    });

    connect(input,&QLineEdit::returnPressed,go,&QToolButton::pressed);
    connect(view,&QWebEngineView::urlChanged,this,[=](const QUrl &u){
        input->setText(u.toString());
    });
    emit go->pressed();
}