c++ - 如何正確的使用QWebEngineView?
問(wèn)題描述
自從5.6版本徹底移除qwebkit,打算使用新的web引擎,大體函數(shù)沒(méi)有改變。但是一些發(fā)現(xiàn)了一些使用c++11的匿名函數(shù)作為參數(shù)的。比如:webengineview中:void toHtml(FunctorOrLambda resultCallback) const在webkit中:QString QWebFrame::toHtml() const按理說(shuō)使用時(shí)是這樣(當(dāng)loadfinished后調(diào)用):
QString html;m_view->page()->toHtml( [&](const QString &v ){ qDebug() << v;//這樣是可以的。 html = v;//這樣是直接崩潰的});//后來(lái)做個(gè)測(cè)試外部int test = 1;//添加個(gè)測(cè)試//lambda內(nèi)部test = 2;//這句在外部輸出仍然是1很奇怪qDebug() << test; //仍然是1
不太能搞明白為什么新的函數(shù)要這么設(shè)計(jì),明明一個(gè)返回值就可以的,為什么用lambda函數(shù),本來(lái)QString html = ...->toHtml();一句搞定的,非得按照上面那樣(最主要的是按照上面那樣用,我壓根取不到值!)感覺(jué)被設(shè)計(jì)是不是有點(diǎn)為了C++11而C++11了。
問(wèn)題解答
回答1:先看下面一段代碼的輸出
int test = 1; auto f = [&](){ test = 5; cout<<test<<endl; }; cout<<test<<endl; // 輸出 1 f(); // 輸出 5 cout<<test<<endl; // 輸出也是5
所以你后面說(shuō)的兩個(gè)test的輸出,需要好好檢查一下。
然后
m_view->page()->toHtml( [&](const QString &v ){ qDebug() << v;//這樣是可以的。 html = v;//這樣是直接崩潰的});
這里如果將v賦值給html會(huì)崩潰,那么就需要檢查一下崩潰的原因了。你可以先把QString html;前加上static看看是否還會(huì)崩潰。如果沒(méi)有,那么說(shuō)明這里的調(diào)用是異步的,在調(diào)用這個(gè)lambda的時(shí)候,html已經(jīng)不存在了。
回答2:c++11的匿名函數(shù)的作用是為了異步吧,是不是你的變量html離開(kāi)了作用域了。
相關(guān)文章:
1. html5 - ElementUI table中el-table-column怎么設(shè)置百分比顯示。2. python - 使用readlines()方法讀取文件內(nèi)容后,再用for循環(huán)遍歷文件與變量匹配時(shí)出現(xiàn)疑難?3. 對(duì)mysql某個(gè)字段監(jiān)控的功能4. css3 - less或者scss 顏色計(jì)算的知識(shí)應(yīng)該怎么學(xué)?或者在哪里學(xué)?5. 注冊(cè)賬戶(hù)文字不能左右分離6. javascript - table列過(guò)多,有什么插件可以提供列排序和選擇顯示列的功能7. css - 網(wǎng)頁(yè)div區(qū)塊 像蘋(píng)果一樣可左右滑動(dòng) 手機(jī)與電腦8. javascript - 數(shù)組的過(guò)濾和渲染9. html - vue項(xiàng)目中用到了elementUI問(wèn)題10. JavaScript事件
