问题描述
我正在使用Qt Creator交叉编译Qt项目,但出现以下错误:
qrc:/main.qml:26:25: QML Image: Cannot open: qrc:/images/imgA.png
目标设备上的目录结构为:
.
└── ProjectA/
└── bin/
└── res/
└── images/
├── imgA.png
└── imgB.png
主机PC上的目录结构为:
.
└── ProjectA/
├── ProjectA.pro
├── src/
│ └── All source Files
└── res/
├── main.qml
├── main.qrc
└── images/
├── imgA.png
└── imgB.png
当我在主机PC上编译并执行程序时,一切运行正常
编辑 这是main.qrc:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
<qresource prefix="/images">
<file alias="imgA" >images/imgA.png</file>
<file alias="imgB" >images/imgB.png</file>
</qresource>
</RCC>
main.qml:
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Layouts 1.3
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Image {
id: testImg
source: "images/images/imgA.png"
}
这是qmake项目文件:
QT += quick core network
CONfig += c++17
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so,uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFInes += QT_disABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
INCLUDEPATH += src/
SOURCES += \
src/Property.cpp \
src/Weather.cpp \
src/main.cpp
RESOURCES += res/qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =
install_config.path = /home/dietpi/QtProjects/$${TARGET}/bin/Data/
install_config.files = Data/*
INSTALLS += \
install_config \
# Default rules for deployment.
target.path = /home/dietpi/QtProjects/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
HEADERS += \
src/Property.hpp \
src/Weather.hpp
disTFILES += \
res/main.qml \
解决方法
以下是为您提供的代码。
qml.qrc
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
<qresource prefix="/images">
<file alias="logo.jpg">images/logo.jpg</file>
</qresource>
</RCC>
这是main.qml
import QtQuick 2.14
import QtQuick.Window 2.14
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Image {
id : imgItem
anchors.fill: parent
source: "qrc:/images/logo.jpg"
}
}
,
我遇到了同样令人讨厌的问题,即使在安装了相同 Qt 的不同 PC 上也是如此。当我向 qrc 文件中的每个前缀添加最后一个斜杠时,它工作正常:
<qresource prefix="/images/">
之后,我删除了所有缓存的 .qrc 并重新编译,它工作正常。
,如The Qt Resource System中所述,您应使用submit
或qrc:///path
。
似乎:/path
在某些平台上不起作用。
更新:
由于您在qrc:/path
中使用qresource prefix
,因此需要使用.main.qrc
路径访问图像文件。或将所有图像移到父文件夹(:/images/images/
)。
查看您的资源文件,您正在使用别名。这意味着在引用别名时必须使用别名。因此,尝试像这样访问它:
Image {
id: testImg
source: "qrc:/images/imgA" // Note,there is no '.png'
}