在用qml中的Image控件加载图片时,在工程目录中有一个"./image/1.png"的图片始终加载不出来
后来发现问题如下:
首先,新建Qt Quick Application的hello world的例子,然后添加如下代码:
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
// my code
Image{
source: "./image/1.png"
}
}
运行时报错:
qrc:/main.qml:22:5: QML Image: Cannot open: qrc:/image/1.png
报错信息居然是qrc:/image/1.png,但是我不是写的qrc路径啊!
也许可以按照错误提示,将1.png加入qml路径中去。
但是因为我是在程序中截图然后再加载到image控件中时遇到这个路径的,所以不可能加入到qrc中去
只能从报错路径qrc/image/1.png另想办法。
因为代码中写的是相对路径,所以图片路径可能和qml文件的本身路径邮箱
后来发现在main.cpp中加载qml的路径是这样的:
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
然后改为不从qrc路径加载后程序能正常加载图片了: QQmlApplicationEngine engine;// engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
engine.load("main.qml");
问题已经解决一半,发布程序的时候肯定不能将qml暴露出来啊!
所以还是只能按照原来的方式加载qml。
后来查看qt文档 Image 中的 source属性为url,我写的相对路径的字符串被转化成了qrc:/image/1.png这样的url变量
还有没有其他形式的url变量呢?
想了很久,突然灵光乍现想到之前用FileDialog的时候,返回选中文件的路径是"file:///xxxx.png"
于是在现在的代码中将source的路径改为
Image{
source: "file:///E:/seven_code/code/ImageSource/image/1.png"
}
程序正常加载图片,问题解决一大半!
唯一的缺陷是不知道怎么用相对路径。。。哪位大神知道的话可以教教小弟
注:使用的qt版本为 5.6