QML 使用Camara 时的几个问题

硬件:thinkpadE480

软件:Ubuntu17.10(linux4.15内核),Qt5.10

参考书籍:《QmlBook In Chinese》


问题:《QmlBook In Chinese》的第十章Multimedia,Capturing Images一节中的示例代码中关于Camara截图、Image打开图片存在一些问题。camara能够打开,但是截图和保存图片、打开图片功能不正常。

关键点:1.    qrc路径和file路径问题

                2. camera.imageCapture.captureToLocation(path)截图到指定路径。

源代码:Camara.qml


源代码运行时报错:

qrc:/main.qml:22:5: QML Image: Cannot open: qrc:********/1.jpg

报错信息居然是qrc:*********/1.png,但是我不是写的qrc路径啊!

也许可以按照错误提示,将1.png加入qml路径中去。

但是因为我是在程序中截图然后再加载到image控件中时遇到这个路径的,所以不可能加入到qrc中去

只能从报错路径另想办法。

因为代码中写的是相对路径,所以图片路径可能和qml文件的本身路径有关

后来发现在main.cpp中加载qml的路径是这样的:

QQmlApplicationEngine engine1;
    engine1.load(QUrl(QStringLiteral("qrc:/multimedia/Camara.qml")));

然后改为不从qrc路径加载后程序能正常加载图片了:
    QQmlApplicationEngine engine;
//    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    engine.load("main.qml"); 

问题已经解决一半,发布程序的时候肯定不能将qml暴露出来啊!

所以还是只能按照原来的方式加载qml。


后来查看qt文档 Image 中的 source属性为url,我写的相对路径的字符串被转化成了qrc:**********/1.png这样的url变量

还有没有其他形式的url变量呢?

想了很久,突然灵光乍现想到之前用FileDialog的时候,返回选中文件的路径是"file:///xxxx.png"

于是在现在的代码中将source的路径改为

//delegate: Image { source: path; fillMode: Image.PreserveAspectFit; height: 100; }

   delegate: Image { source: "file:"+path; fillMode: Image.PreserveAspectFit; height: 100; }

强制将qrc路径改为file本地路径。


在配合:

//camera.imageCapture.capture();

   camera.imageCapture.captureToLocation("/home/cailp/")

就可以完成本地路径的图片保存和打开。

你可能感兴趣的:(嵌入式软件,Qt)