最近北京下了几场很大的雨,闷热潮湿。
本来期待的曼市德比,场地因素,不能得以进行。
最近,工作有点像全国的天气,有点糟糕。
一个问题一直困扰着,为什么我们那么不习惯使用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的数据 将在下一篇博客中进行详细描述。
---------------------
作者:一蓑烟雨1989
来源:CSDN
原文:https://blog.csdn.net/wangshubo1989/article/details/52029185
版权声明:本文为博主原创文章,转载请附上博文链接!