成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關(guān)于Qt Webkit嵌入Flash總結(jié)(Mac平臺(tái))

移動(dòng)開發(fā)
Qt Webkit嵌入Flash總結(jié)是本文呢要介紹的內(nèi)容,主要是來學(xué)習(xí)qt中webkit的flash的應(yīng)用,具體內(nèi)容的實(shí)現(xiàn)來看本文詳解。

Qt Webkit嵌入Flash總結(jié)是本文呢要介紹的內(nèi)容,我們都知道Flash是adobe公司的閉源產(chǎn)品,在各平臺(tái)的渲染都是通過插件來進(jìn)行的(如windows下的flash.ocx,linux下的libflashplugin.so和mac下的Flash_Plugin),插件可以在adobe的網(wǎng)站上獲取。

當(dāng)然也有開源(如gnash)或商業(yè)項(xiàng)目(如scaleform)來自行對flash進(jìn)行解碼渲染。我使用qtwebkit嵌入flash主要是因?yàn)樗鄬唵巍H绻谟螒蛑星度胍粋€(gè)網(wǎng)頁(當(dāng)然也包括flash)除了昂貴的scaleform外,還可選擇其他flash gui,不過因?yàn)樾试驅(qū)嵱眯圆桓撸湓砭褪峭ㄟ^adobe的插件獲取要渲染的每一幀圖片,然后將其渲染到一張紋理上,通過引擎來渲染。說白了就是用游戲引擎來代替如windows或qt來對其進(jìn)行渲染。

1、具體實(shí)現(xiàn)(相關(guān)資料網(wǎng)上有很多,這里只說原理和關(guān)鍵性的東東)

要加載flash進(jìn)行顯示(當(dāng)然也包括網(wǎng)頁),其實(shí)只需要建立一個(gè)QWebView然后調(diào)用其setUrl接口傳進(jìn)去要顯示的文件的路徑(最好是絕對路徑,并且路徑前加 file:///,當(dāng)然,這應(yīng)該不是必須的)。QWebView還有一個(gè)重要的接口是setHtml,它是傳一個(gè)字符串參數(shù),改字符串是html網(wǎng)頁源代碼形式,如"<html></html>"。

如果要進(jìn)行交互,需要通過javascript進(jìn)行中轉(zhuǎn)(其實(shí)從原理上來說,是可以通過NP Api來直接與adobe提供的flash插件進(jìn)行交互的,不過相關(guān)資料太少,俺又沒有寫過插件,所以選擇了簡單的方法)。

這里我選擇的是在一個(gè)網(wǎng)頁中嵌入flash,然后在網(wǎng)頁的<head></head>中添加js腳本,相關(guān)資料也很多,直接google即可。

這里有一些需要注意的地方:

(1)用addToJavaScriptWindowObject的時(shí)機(jī)很關(guān)鍵,必須要dom什么的加載完畢,官方推薦的做法是,用一個(gè)函數(shù)來調(diào)用addToJavaScriptWindowObject,將javaScriptWindowObjectCleared的信號(hào)和改函數(shù)connect。具體可以看QWebFrame中的addToJavaScriptWindowObject函數(shù)注釋。

(2)c++調(diào)用js函數(shù):page()->mainFrame()->evaluateJavaScript("Test(1, 2)"),這樣就可以直接調(diào)用js中的Test函數(shù),其中1和2是參數(shù)。

(3)js調(diào)用c++函數(shù):確保a步驟已經(jīng)操作,然后js中就可以直接通過addToJavaScriptWindowObject傳進(jìn)去對象名來調(diào)用相應(yīng)QObject對象的函數(shù)。

(4)js調(diào)用flash的函數(shù):在as2.0以后可以直接使用ExternalCallback來進(jìn)行,這里為了兼容以前的flash,使用了老的方法。假設(shè)網(wǎng)頁中已經(jīng)插入了一個(gè)flash,其id為flashname,使用flashname.SetVariable來修改flash中的變量。而flash的腳本中,則通過watch()方法來監(jiān)視這個(gè)變量的改變,從而調(diào)用相應(yīng)函數(shù)。

(5)flash調(diào)用js的函數(shù):flash中使用fscommand函數(shù),js中只要實(shí)現(xiàn)flashname_DoFSCommand(cmd, args)即可自動(dòng)被調(diào)用。

(6)傳給flash的參數(shù)(尤其是中文字符串)要是unicode編碼的,否則會(huì)亂碼。

最后說明一下,這些交互步驟的尤其是js調(diào)用flash函數(shù)的時(shí)機(jī)也很重要,比較早的話會(huì)出現(xiàn)無法響應(yīng)的情況(可能要等flash完全加載完),或許新的調(diào)用方法會(huì)好些。這里我用了非常惡心的實(shí)現(xiàn)。建立一個(gè)定時(shí)器,當(dāng)過了1秒鐘(確認(rèn)flash已經(jīng)加載完了),才允許調(diào)用該函數(shù)。

2、qt webkit的bug:

其實(shí)也有可能是adobe的flash插件的bug,不過反正出現(xiàn)問題了,而幸好webkit是開源的,俺就只好修改它了。(當(dāng)然,最終也沒有完美修正改bug,不過滿足了俺的需要,那就夠了,希望諾基亞的精英們能在下次出版本的時(shí)候解決該問題)

bug描述:在mac操作系統(tǒng)下,使用qtwebkit加載flash,在文本框進(jìn)行輸入時(shí),按下一個(gè)鍵,響應(yīng)兩個(gè)字符。

原因:猜想是在adobe的10.1的插件自己實(shí)現(xiàn)了輸入響應(yīng)(即便我把按鍵消息都過濾掉,flash依然可以正常進(jìn)行輸入,包括中文輸入),而qtwebkit又傳給它一次按鍵信息,那就會(huì)出現(xiàn)該問題了。

解決辦法:在pluginViewMac.mm(qt使用的就是這個(gè)文件),的dispatchNPevent函數(shù)中過濾掉按鍵消息

  1. if (event.what == keyDown)  {   
  2. return ;  

這樣flash的輸入就正常了,當(dāng)然,其他任何插件都無法進(jìn)行正常輸入了,不過俺做的是游戲,又不是瀏覽器,只要伺候好一個(gè)flash插件就足夠了。

還有一個(gè)bug是,如果我在網(wǎng)頁的空白地方點(diǎn)一下,再回到flash的文本框就無法正常輸入了,即便光標(biāo)什么的都在里面,除非我找到一個(gè)flash中的文本框點(diǎn)擊一下。初步判斷原因是點(diǎn)擊到空白的地方,整個(gè)webkit的page就無法獲取按鍵信息了,因?yàn)橐粋€(gè)page是無法進(jìn)行編輯的,除非點(diǎn)到一個(gè)文本框,這樣又重新可獲取輸入信息。如果整個(gè)page都接收不到按鍵信息,那其中的flash插件自然也就無法進(jìn)行輸入了。不過悲催的是,如果我們之前咩有屏蔽掉的PluginView的keyDown信息,這個(gè)時(shí)候反而會(huì)正常的輸入一個(gè)字符,當(dāng)然中文依然不能正常輸入。

這兩個(gè)bug繼續(xù)查兩天看看,說不定會(huì)有新的發(fā)現(xiàn)。

小結(jié):關(guān)于Qt Webkit嵌入Flash總結(jié)(Mac平臺(tái))的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-29 10:22:48

QtWebkit 模塊HTML文檔

2011-08-29 10:01:27

QTWebkit插件

2011-08-29 14:27:33

QTWebkit瀏覽器

2011-09-01 15:22:16

Qt WebKitWebKit

2011-08-29 10:59:47

QtWebkit嵌入式

2011-10-13 14:26:12

Qt WebKitWebKit

2011-06-14 11:48:38

Webkit QT

2011-09-09 16:23:16

Android Web測試

2011-06-13 10:44:44

Qt Flash

2011-09-09 17:24:39

Qt Webkit模塊

2011-06-21 11:30:31

嵌入式 Qt

2011-08-29 11:25:29

QTWebKit鼠標(biāo)

2013-09-04 14:25:30

webkitwebApp開發(fā)

2011-09-09 18:43:13

Qt Webkit瀏覽器

2011-09-01 14:04:45

QT Webkit插件

2011-06-13 09:04:39

QT Flash 交互

2011-08-29 14:19:48

QtWebkit瀏覽器

2013-09-09 16:46:38

Webkit內(nèi)核

2011-08-29 14:40:58

QTWebkit

2011-06-09 16:47:56

Qt 嵌入式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久草新在线 | 羞羞网站在线观看 | 97av视频在线观看 | 免费艹逼视频 | 欧美性一区二区三区 | 精品欧美乱码久久久久久 | 欧美极品在线 | 成人毛片一区二区三区 | 一区二区蜜桃 | av免费网| 欧美一区二区三区在线观看视频 | 爱综合| 亚洲九色| 国产乱码精品一区二区三区忘忧草 | 亚洲中午字幕 | 亚洲三区在线 | www.99热| 狠狠躁天天躁夜夜躁婷婷老牛影视 | 天天人人精品 | 欧美精品福利 | 国产一区二区激情视频 | 国产内谢| 草比网站| 天天影视综合 | 午夜不卡一区二区 | 久久久久久久久中文字幕 | 欧美一级三级 | 国产精品高潮呻吟久久 | 欧美精品中文字幕久久二区 | 我要看免费一级毛片 | 亚洲成人a v | 成人在线免费网站 | 婷婷精品 | 日韩成人免费视频 | 久久中文字幕一区 | 国产欧美精品一区二区 | 男女污污网站 | 日韩成人在线免费视频 | 手机av网 | 天天弄天天操 | 国产高潮好爽受不了了夜色 |