QWebEngineView使用

QWebEngineView使用,第1张

在pro中添加 QT += webenginewidgets

如果允许用户打开新窗口的网站(如d出窗口)提供支持,可以继承QWebEngineView并重新实现createWindow()函数

自从5.6版本彻底移除qwebkit,打算使用新的web引擎,大体函数没有改变。但是一些发现了一些使用c++11的匿名函数作为参数的。比如:

webengineview中:

void toHtml(FunctorOrLambda resultCallback) const

在webkit中:

QString QWebFrame::toHtml() const

按理说使用时是这样(当loadfinished后调用):

QString html

m_view->page()->toHtml( [&](const QString &v ){

qDebug() <<v//这样是可以的。

html = v//这样是直接崩溃

})

//后来做个测试外部

int test = 1//添加个测试

//lambda内部

test = 2//这句在外部输出仍然是1很奇怪

qDebug() <<test//仍然是1

不太能搞明白为什么新的函数要这么设计,明明一个返回值就可以的,为什么用lambda函数,本来QString html = ...->toHtml()一句搞定的,非得按照上面那样(最主要的是按照上面那样用,我压根取不到值!)

感觉被设计是不是有点为了C++11而C++11了。

c++11的匿名函数的作用是为了异步吧,是不是你的变量html离开了作用域了。

先看下面一段代码的输出

int test = 1

auto f = [&](){

test = 5

cout<<test<<endl

}

cout<<test<<endl // 输出 1

f()// 输出 5

cout<<test<<endl // 输出也是5

所以你后面说的两个test的输出,需要好好检查一下。

然后

m_view->page()->toHtml( [&](const QString &v ){

qDebug() <<v//这样是可以的。

html = v//这样是直接崩溃的

})

这里如果将v赋值给html会崩溃,那么就需要检查一下崩溃的原因了。

你可以先把QString html前加上static看看是否还会崩溃。如果没有,那么说明这里的调用是异步的,在调用这个lambda的时候,html已经不存在了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7870782.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存