NO IMAGE

最近北京下了幾場很大的雨,悶熱潮溼。

本來期待的曼市德比,場地因素,不能得以進行。

最近,工作有點像全國的天氣,有點糟糕。

一個問題一直困擾著,為什麼我們那麼不習慣使用qml進行邏輯處理。

不可否認,qt是一個偉大的框架,qt quick也是一門利器。但是,在使用qt quick進行windows客戶端開發時,一個接一個的坑。

大坑一:

qml中webview如何設定http請求的header?

這個問題一直沒得到解決,google氾濫了也是沒有解決方案。
嘗試一:
在qml中顯示一個webview非常的簡單,然後,不管是在qml中,還是在c 中,很難辦到給這個webview設定一個header。

更加煩人的是,c 中是qwebview,而qml中的webview對應的是qquickwebview,真的煩死了。

嘗試二:
我們不在qml中使用webview,而是在c 中產生一個qwebview,然後讓這個qwebview顯示到qml中。這又是一個坑,c 中的qwebview是一個qwighet,而不是qml中的qquickview,真是煩死了。

等等,您不要誤解,我說的是qt5.5之前的webview,好像之後的webview換了核心吧。。。。。

大坑二

qml中的Camera如何在C 中設定viewfinder?
這也是個棘手的問題,我們使用攝像頭,很輕鬆在qml中新增一個Camera, 然後新增一個ViedoOutput,這樣就可以顯示這個攝像頭了。

但是如果我想拿到這個攝像頭的資料怎麼辦?

我們慶幸在qml中的Camera就是C 中的QCamera,這樣我們可以在程式碼中拿到。

嘗試一:
使用QViedoProbe,然後把它的source設定為camera,這樣就可以通過QViedoProbe實時拿到攝像頭的資料了。等等,為什麼setsource的返回值總是false呢?

google一番之後,才發現,這個官方文件也是蛋疼的很啊,沒有在明確的位置寫明,目前QViedoProbe對於Camera的處理,只適用於Android,而不適用於windows平臺。

嘗試二:
這應該是最多的方法了,對於qt程式應該很起作用,但是對於qt quick程式就完蛋了。
我們在c 程式碼中拿到了Camera的物件 camera,這樣我們自定義一個subclass,繼承自QAbstractVideoSurface,然後設定camera的viewfinder就是QAbstractVideoSurface的一個例項,這樣在present函式中,就可以實時獲取攝像頭的資料。

這是不行的,為什麼?因為在qml中我們已經定義了一個ViewOutput,這個已經是一個viewfinder了。

嘗試三:
不再qml中使用Camera,而是在c 中使用QCamera產生一個物件,然後設定viewfinder為QAbstractVideoSurface的一個例項。那麼問題又來了,這樣又沒法再qml中顯示了。

嘗試四:
使用
QAbstractVideoFilter
QVideoFilterRunnable
問題解決了,具體的:windows平臺上如何獲取qml中Camera的資料 將在下一篇部落格中進行詳細描述。