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;i<webDateList.size();i++)
{
webDate date=webDateList.at(i);
SWebEngineView *view=date.view;
QWebEnginePage *page=view->page();
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()<<e->type()<<object->objectName();
if (e->type() == QEvent::Leave )
{
//qDebug()<<"鼠标离开"<<object->objectName();
ui->widget->hide();
index=0;
if(timer->isActive())
{
timer->stop();
}
return QObject::eventFilter(object, e);; // no di
}
if (e->type() == QEvent::Enter )
{
//qDebug()<<"鼠标进入"<<object->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位 需要的自行下载