c++ - 如何正確的使用QWebEngineView?
問題描述
自從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了。
問題解答
回答1:先看下面一段代碼的輸出
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已經不存在了。
回答2:c++11的匿名函數的作用是為了異步吧,是不是你的變量html離開了作用域了。
相關文章:
1. mysql優化 - mysql count(id)查詢速度如何優化?2. mysql主從 - 請教下mysql 主動-被動模式的雙主配置 和 主從配置在應用上有什么區別?3. python - django 里自定義的 login 方法,如何使用 login_required()4. node.js - node_moduls太多了5. 主從備份 - 跪求mysql 高可用主從方案6. angular.js - 不適用其他構建工具,怎么搭建angular1項目7. python如何不改動文件的情況下修改文件的 修改日期8. java8中,邏輯與 & 符號用在接口類上代表什么意思9. python - 關于ACK標志位的TCP端口掃描的疑惑?10. html - 請教一個前端css問題。
