QML不显示SVG图片

mat*_*eri 4 qt svg qt-creator qml qtquick2

我写了一个简单的QML ui,它使用了一些svg图像。当我在桌面上执行该应用程序时,一切都很好,将显示UI并在其上显示svg图像。当我尝试在嵌入式设备(运行Windows嵌入式设备)上执行应用程序时,会发生问题。在这种情况下,显示了UI,但未显示svg图像,并且在控制台上,我收到以下消息: QML BorderImage:无效的图像数据:my_image.svg

正确显示了png图像。

我在Internet上研究了这个问题,并且发现很多ppl通过将svg和其他依赖项添加到.pro文件来解决了该问题。不幸的是,这对我来说没有帮助。这些是我的.pro文件的内容:

TEMPLATE = app

QT += qml quick widgets svg xml gui core

QTPLUGIN += qsvg

SOURCES += main.cpp \
    SignalProcessor.cpp \
    PopupMode.cpp \
    BasicToolbarModel.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Default rules for deployment.
include(deployment.pri)

HEADERS += \
    SignalProcessor.h \
    PopupMode.h \
    BasicToolbarModel.h

CONFIG += qmltestcase

QUICK_TEST_SOURCE_DIR += Tests

DISTFILES += \
    qml/main.qml \
    qml/CustomToolBar.qml \
    qml/components/BatteryStatus.qml \
    qml/components/ImageButton.qml \
    qml/components/Popup.qml \
    qml/components/WifiStatus.qml \
    qml/pages/PlayButtonView.qml \
    qml/pages/StopButtonView.qml \
    qml/tests/tst_CustomToolBar.qml \
    qml/tests/tst_WifiStatus.qml \
    scripts/Utils.js
Run Code Online (Sandbox Code Playgroud)

编辑:所有svg图像都位于资源文件内

SR_*_*SR_ 6

为了显示SVG图像,我做了以下工作:

添加svg.pro文件:

QT += svg
Run Code Online (Sandbox Code Playgroud)

确保我Image的尺寸:

    height: 400
    width: 400
Run Code Online (Sandbox Code Playgroud)

确保将源SVG设置为大小:

sourceSize.width: 100
sourceSize.height: 100
Run Code Online (Sandbox Code Playgroud)

就这样。

当我忘记QML文件中的内容时,就会收到类似以下警告:

W/libnotification.so( 3800): (null):0 ((null)): QOpenGLShaderProgram: could not create shader program
W/libnotification.so( 3800): (null):0 ((null)): QOpenGLShader: could not create shader
Run Code Online (Sandbox Code Playgroud)

修复QML之后,仿真器仍在抱怨:

E/OpenGLRenderer( 4435): GL error:  GL_INVALID_VALUE
Run Code Online (Sandbox Code Playgroud)

我必须重新启动模拟器才能使其再次显示某些内容。

提示:为了获得正确的视觉质量,请不要将尺寸设置sourceSize得太小Image(由于x4系数,上面的示例可能会产生难看的结果)。

(我正在Android模拟器上使用Qt 5.7进行测试)。


sky*_*ack 1

也许缺少一些共享库。根据文档,在 Windows 上(我想甚至在 WinCE 上),您必须dll随应用程序一起部署所有必需的内容。

是 wiki 上有关该主题的有趣页面。

您可以在该网站上找到类似的问题。

是另一种可能有帮助的资源。