为什么不习惯使用qml?

最近北京下了几场很大的雨,闷热潮湿。

本来期待的曼市德比,场地因素,不能得以进行。

最近,工作有点像全国的天气,有点糟糕。

一个问题一直困扰着,为什么我们那么不习惯使用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的数据 将在下一篇博客中进行详细描述。

你可能感兴趣的:(Qt)