Raspberry Pi 无法在 QML 图像中加载图像源
Can't load Image source in QML Image on Raspberry Pi
我正在使用 Qt Creator 交叉编译 Qt 项目,但出现以下错误:
qrc:/main.qml:26:25: QML Image: Cannot open: qrc:/images/imgA.png
目标设备上的目录结构是:
.
└── ProjectA/
└── bin/
└── res/
└── images/
├── imgA.png
└── imgB.png
主机上的目录结构为:
.
└── 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"
}
}
如The Qt Resource System所述,您应该使用qrc:///path
或:/path
。
似乎 qrc:/path
在某些平台上不工作。
更新:
由于您在 .main.qrc
中使用 qresource prefix
,您需要使用 :/images/images/
图像文件路径。或将所有图像移动到父文件夹 (res/
)。
查看您的资源文件,您正在使用别名。这意味着您在引用它时必须使用别名。所以尝试像这样访问它:
Image {
id: testImg
source: "qrc:/images/imgA" // Note, there is no '.png'
}
我遇到了同样令人讨厌的问题,即使是在安装了相同 Qt 的不同 PC 上也是如此。当我为 qrc 文件中的每个前缀添加最后一个斜杠时,它工作正常:
<qresource prefix="/images/">
之后,我删除所有缓存的 .qrc 并重新编译,它工作正常。
我正在使用 Qt Creator 交叉编译 Qt 项目,但出现以下错误:
qrc:/main.qml:26:25: QML Image: Cannot open: qrc:/images/imgA.png
目标设备上的目录结构是:
.
└── ProjectA/
└── bin/
└── res/
└── images/
├── imgA.png
└── imgB.png
主机上的目录结构为:
.
└── 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"
}
}
如The Qt Resource System所述,您应该使用qrc:///path
或:/path
。
似乎 qrc:/path
在某些平台上不工作。
更新:
由于您在 .main.qrc
中使用 qresource prefix
,您需要使用 :/images/images/
图像文件路径。或将所有图像移动到父文件夹 (res/
)。
查看您的资源文件,您正在使用别名。这意味着您在引用它时必须使用别名。所以尝试像这样访问它:
Image {
id: testImg
source: "qrc:/images/imgA" // Note, there is no '.png'
}
我遇到了同样令人讨厌的问题,即使是在安装了相同 Qt 的不同 PC 上也是如此。当我为 qrc 文件中的每个前缀添加最后一个斜杠时,它工作正常:
<qresource prefix="/images/">
之后,我删除所有缓存的 .qrc 并重新编译,它工作正常。