Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QML Svg in qt 5.15 static build, using CMake



  • I would like to migrate from 5.9 to 5.15 and I don't get to load svg from QML.
    The original version, using qt provided by Ubuntu (5.9) did load svg from QML with
    no extra steps. The new build uses a static Qt.

    I use:

    • Ubuntu 18
    • In the house static build of Qt 5.15
    • CMake (3.18)

    build Qt

     ./configure \
        -commercial \
        -confirm-license \
        -release \
        -static \
        -no-pch \
        -nomake tests \
        -nomake examples \
        -nomake tools \
        -nomake examples \
        -nomake tests \
        -skip qtdoc \
        -skip wayland \
        -skip qtwebengine \
        --prefix=/opt/Qt-5.15.0
    

    ** CMake **

    cmake_minimum_required(VERSION 3.18)
    project(test VERSION 0.0.0 LANGUAGES CXX)
    
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)
    
    find_package(Qt5 5.15 
        PATHS /opt/Qt-5.15.0
        COMPONENTS
            Core
            Widgets
            Qml
            Quick
            QuickControls2
            Charts
            Multimedia
            LinguistTools
            QmlImportScanner 
            Xml
        REQUIRED QUIET
    )
    
    add_executable(test_qt
    
        # c++ code files
        main.cpp
    
        # qml code files
        qml/Main.qml
    
        # resource files
        qml/resources.qrc
    )
    
    target_include_directories(test_qt PRIVATE ${CMAKE_CURRENT_LIST_DIR})
    
    target_link_libraries(test_qt 
        PRIVATE
            Qt5::Widgets
            Qt5::Qml
            Qt5::Quick
            Qt5::QuickControls2
            Qt5::Svg
            Qt5::Xml
            Qt5::Gui
    )
    
    qt_import_qml_plugins(test_qt
        INCLUDE 
            Qt5::QtQuick2Plugin
            Qt5::QSvgPlugin
            Qt5::QtQuickControls2Plugin
    )
    

    ** C++ main.cpp **

    #include <QGuiApplication>
    #include <QObject>
    #include <QQmlApplicationEngine>
    #include <QQmlComponent>
    #include <QQmlContext>
    
    int main(int argc, char *argv[]) {
        int status = 0;
    
        try {
    
            QGuiApplication       app(argc, argv);
            QQmlApplicationEngine engine;
    
            engine.load(QUrl("qrc:/Main.qml"));
    
            QObject::connect(&engine, &QQmlApplicationEngine::quit, &QGuiApplication::quit);
    
            if (engine.rootObjects().isEmpty())
                return -1;
    
            status = app.exec();
    
        } catch (std::exception &) {
            return -1;
        }
    
        return status;
    }
    

    ** Main.qml **

    import QtQuick 2.15
    import QtQuick.Controls 2.15
    
    ApplicationWindow {
        id: window
        width: 850
        height: 850
        visible: true
        color: "lightgray"
    
        Image{
            source: "image.svg"
        }
    }
    

    I omit the resource file, but it lists qml, png and svg files.
    When using PNG image is loaded successfully, but when using SVG the following error appears:
    qrc:/Main.qml:13:5: QML Image: Error decoding: qrc:/image.svg: Unsupported image format

    The current Qt build contains the following files related to SVG handling:

    ./lib/libQt5Svg.a
    ./lib/libQt5Svg.la
    ./lib/cmake/Qt5Svg
    ./lib/cmake/Qt5Svg/Qt5SvgConfigVersion.cmake
    ./lib/cmake/Qt5Svg/Qt5SvgConfig.cmake
    ./lib/cmake/Qt5Gui/Qt5Gui_QSvgIconPlugin.cmake
    ./lib/cmake/Qt5Gui/Qt5Gui_QSvgPlugin_Import.cpp
    ./lib/cmake/Qt5Gui/Qt5Gui_QSvgIconPlugin_Import.cpp
    ./lib/cmake/Qt5Gui/Qt5Gui_QSvgPlugin.cmake
    ./lib/pkgconfig/Qt5Svg.pc
    ./lib/libQt5Svg.prl
    ./include/QtSvg
    ./include/QtSvg/QGraphicsSvgItem
    ./include/QtSvg/5.15.0/QtSvg
    ./include/QtSvg/QSvgRenderer
    ./include/QtSvg/QSvgWidget
    ./include/QtSvg/QSvgGenerator
    ./include/QtSvg/QtSvg
    ./include/QtSvg/QtSvgVersion
    ./include/QtSvg/QtSvgDepends
    

Log in to reply