Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. QML Svg in qt 5.15 static build, using CMake
Forum Updated to NodeBB v4.3 + New Features

QML Svg in qt 5.15 static build, using CMake

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
3 Posts 2 Posters 1.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    Luis.Ayuso
    wrote on last edited by
    #1

    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
    
    B 1 Reply Last reply
    0
    • L Luis.Ayuso

      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
      
      B Offline
      B Offline
      bofrim
      wrote on last edited by
      #2

      @Luis-Ayuso I’m currently facing this exact issue. Did you recall if you found a resolution?

      B 1 Reply Last reply
      0
      • B bofrim

        @Luis-Ayuso I’m currently facing this exact issue. Did you recall if you found a resolution?

        B Offline
        B Offline
        bofrim
        wrote on last edited by
        #3

        The solution for me was in addition to including Qt5::Svg in find_package and target_link_libraries, eg:

        find_package(Qt5 REQUIRED COMPONENTS Core Quick Qml Xml Charts Gui Svg QuickControls2)
        target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick Qt5::Qml Qt5::Xml Qt5::Charts Qt5::Gui Qt5::Svg Qt5::QuickControls2)
        

        To also include the following when statically linking Qt 5.15:

        qt5_import_plugins(${PROJECT_NAME} INCLUDE Qt5::QSvgPlugin)
        

        That resolved errors such as "QML ButtonIcon: Error decoding: qrc:/resources/images/add-white-36dp.svg: Unsupported image format"

        1 Reply Last reply
        1

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved