Qt使用QWebEngineView一些记录

1.关闭软件警告:

Release of profile requested but WebEnginePage still not deleted. Expect troubles!

原因,系统退出关闭view,没有释放page。

解决办法:手动释放page  顺便把view也释放了。

Widget::~Widget()
{
    updateIniDate();
    Sleep(100);

    for(int i=0;ipage();
        delete page;
        page=NULL;

        delete view;
        view=NULL;
    }
    delete ui;
}

2.获取QWebEngineView点击超链接

重写QWebEngineView中的createWindow函数

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


QWebEngineView *SWebEngineView::createWindow(QWebEnginePage::WebWindowType type)
{
    Q_UNUSED(type);
    emit httpDateUrl(this->url().toString());
    return this;// 自身打开超链接
}

3.获取QWebEngineView当前链接

QWebEngineView自带void urlChanged(const QUrl&)信号槽,直接使用即可

    SWebEngineView * v1=new SWebEngineView(w1);
    connect(v1,SIGNAL(urlChanged(QUrl)),this,SLOT(httpUr(QUrl)));

4.忽略证书错误

重写QWebEnginePage中的certificateError函数

但Qt5和Qt6不一样

目前找到都是Qt5的,有大佬知道Qt6的办法,欢迎评论区指点

protected:
    virtual bool certificateError(const QWebEngineCertificateError &/*error*/);

bool WebEnginePage::certificateError(const QWebEngineCertificateError &certificateError)//忽略证书错误
{
    return true;
}

    WebEngineView * v1=new WebEngineView(this);
    WebEnginePage *page=new WebEnginePage();
    v1->setPage(page);

5.为了实现QWebEngineView类似 视频播放 全屏和退出全屏功能

新建一个showWidget,将QWebEngineView嵌入showWidget中,鼠标进入shwoWidget,出现放大缩小栏。点击进行对应事件触发。

showWidget::showWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::showWidget)
{
    ui->setupUi(this);
    this->installEventFilter(this);//捕获子窗口鼠标事件
}


void showWidget::timerEvents()//鼠标长时间在widget内隐藏状态栏
{
    index++;
    if(index>=8)
    {
        ui->widget->hide();
        index=0;
        if(timer->isActive())
        {
            timer->stop(); 
        }
    }
}

bool showWidget::eventFilter(QObject *object, QEvent *e)
{//鼠标进入状态栏显示   鼠标离开widget 状态栏隐藏
    //qDebug()<type()<objectName();
    if (e->type() == QEvent::Leave )
    {

        //qDebug()<<"鼠标离开"<objectName();
        ui->widget->hide();
        index=0;
        if(timer->isActive())
        {
            timer->stop();
        }
        return QObject::eventFilter(object, e);;   // no di
    }

    if (e->type() == QEvent::Enter )
    {
        //qDebug()<<"鼠标进入"<objectName();
        int w=this->width();
        if(w<1920)
        {
            ui->widget->setGeometry(0,this->height()-60,w,60);
            ui->widget->show();
            index=0;
            if(!timer->isActive())
            {
                timer->start(500);
            }
        }


        return QObject::eventFilter(object, e);;   // no di
    }
    return QObject::eventFilter(object, e);
}

6.播放视频

Qt自带的dll因为版权等原因,不支持MP4、MP3,需要自己进行编译,编译比较麻烦,编译好之后,直接把dll拷贝exe所在目录即可。

后文库链接:使用环境 qt 5.15.2+vs2019  32位和64位  需要的自行下载

你可能感兴趣的:(qt,开发语言)