Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-56933

"Slider is not a type" - QtQuickControls 2.0 not available on static build of Qt

    XMLWordPrintable

Details

    • Bug
    • Resolution: Duplicate
    • Not Evaluated
    • None
    • 5.8.0 Beta
    • Quick: Controls 2
    • None
    • Mac OSX 10.12.1 - Qt built statically - ./configure -static -opengl desktop

    Description

      My application is a plugin software loaded by a software host. Because of this, I have to deploy it as a static lib.

      The UI is complex and depends on several bundled frameworks such as QtQuickControls 2.0.

      On mobile I can load successfully the UI. On the plugin version, with Qt built statically I can't have QtQuickControls 2.0 elements to be recognised.

      I have been having this problem since 5.7. On 5.7 I had to hack Qt source in order to make it work. On this 5.8 beta I can't even know what to do because I don't have nothing coming out, just "Slider is not a type".

      I can't tell which other Qt Quick elements are not being loaded because this is the first error of an extensive UI.

      In the beggining of the .cpp I do this:

      #ifdef Q_OS_WIN
      #include <qt_windows.h>
      #include <process.h>
      Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
      #endif
      
      #ifdef Q_OS_MAC
      Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin)
      #include <dispatch/dispatch.h>
      #endif
      
      Q_IMPORT_PLUGIN(QtQuick2Plugin)
      Q_IMPORT_PLUGIN(QtQuick2WindowPlugin)
      Q_IMPORT_PLUGIN(QtQuickLayoutsPlugin)
      Q_IMPORT_PLUGIN(QtQuickExtrasPlugin)
      Q_IMPORT_PLUGIN(QtGraphicalEffectsPlugin)
      Q_IMPORT_PLUGIN(QtGraphicalEffectsPrivatePlugin)
      
      #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
      Q_IMPORT_PLUGIN(QtQuickControls1Plugin)
      Q_IMPORT_PLUGIN(QtQuickControls2Plugin)
      Q_IMPORT_PLUGIN(QtQuickTemplates2Plugin)
      #else
      Q_IMPORT_PLUGIN(QtQuickControlsPlugin)
      #endif
      

      This after app initialization:

      #if 1
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuick2Plugin().instance())->registerTypes("QtQuick");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuick2WindowPlugin().instance())->registerTypes("QtQuick.Window");
      #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls1Plugin().instance())->registerTypes("QtQuick.Controls");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls1Plugin().instance())->registerTypes("QtQuick.Controls.Styles");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls1Plugin().instance())->registerTypes("QtQuick.Controls.Private");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls2Plugin().instance())->registerTypes("QtQuick.Controls");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls2Plugin().instance())->registerTypes("QtQuick.Controls.impl");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickLayoutsPlugin().instance())->registerTypes("QtQuick.Layouts");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickTemplates2Plugin().instance())->registerTypes("QtQuick.Templates");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtGraphicalEffectsPlugin().instance())->registerTypes("QtGraphicalEffects");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtGraphicalEffectsPrivatePlugin().instance())->registerTypes("QtGraphicalEffects.private");
      #else
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls.Styles");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControlsPlugin().instance())->registerTypes("QtQuick.Controls.Private");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtGraphicalEffectsPlugin().instance())->registerTypes("QtGraphicalEffects.private");
      #endif
      #endif
      

      Then this after loading the qml file, when I have the engine

      #if 1
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuick2Plugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtGraphicalEffectsPlugin().instance())->initializeEngine(_quickWidget->engine(), "QtGraphicalEffects");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickLayoutsPlugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick.Layouts");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls1Plugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick.Controls.Styles");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls1Plugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick.Controls.Private");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls1Plugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick.Controls");
      #if QT_VERSION >= QT_VERSION_CHECK(5, 7, 0)
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls2Plugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick.Controls");
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControls2Plugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick.Controls.impl");
      #else
      qobject_cast<QQmlExtensionPlugin*>(qt_static_plugin_QtQuickControlsPlugin().instance())->initializeEngine(_quickWidget->engine(), "QtQuick.Controls");
      #endif
      #endif
      

      I'm also linking with the plugin:

      CONFIG(debug, debug|release) {
          LIBS += $$(QTDIR)/qml/QtQuick.2/libqtquick2plugin_debug.a
          LIBS += $$(QTDIR)/qml/QtQuick/Window.2/libwindowplugin_debug.a
          LIBS += $$(QTDIR)/qml/QtQuick/Controls/libqtquickcontrolsplugin_debug.a
          LIBS += $$(QTDIR)/qml/QtQuick/Layouts/libqquicklayoutsplugin_debug.a
          LIBS += $$(QTDIR)/qml/QtQuick/Extras/libqtquickextrasplugin_debug.a
          LIBS += $$(QTDIR)/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin_debug.a
          LIBS += $$(QTDIR)/qml/QtGraphicalEffects/private/libqtgraphicaleffectsprivate_debug.a
          LIBS += $$(QTDIR)/plugins/qmltooling/libqmldbg_native_debug.a
          LIBS += $$(QTDIR)/lib/libQt5QuickWidgets_debug.a
      } else {
          LIBS += $$(QTDIR)/qml/QtQuick.2/libqtquick2plugin.a
          LIBS += $$(QTDIR)/qml/QtQuick/Window.2/libwindowplugin.a
          LIBS += $$(QTDIR)/qml/QtQuick/Controls/libqtquickcontrolsplugin.a
          LIBS += $$(QTDIR)/qml/QtQuick/Layouts/libqquicklayoutsplugin.a
          LIBS += $$(QTDIR)/qml/QtQuick/Extras/libqtquickextrasplugin.a
          LIBS += $$(QTDIR)/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.a
          LIBS += $$(QTDIR)/qml/QtGraphicalEffects/private/libqtgraphicaleffectsprivate.a
          LIBS += $$(QTDIR)/plugins/qmltooling/libqmldbg_native.a
          LIBS += $$(QTDIR)/lib/libQt5QuickWidgets.a
      }
      
      greaterThan(QT_MINOR_VERSION, 6) {
          CONFIG(debug, debug|release) {
              LIBS += $$(QTDIR)/qml/QtQuick/Templates.2/libqtquicktemplates2plugin_debug.a
              LIBS += $$(QTDIR)/qml/QtQuick/Controls.2/libqtquickcontrols2plugin_debug.a
              LIBS += $$(QTDIR)/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin_debug.a
          } else {
              LIBS += $$(QTDIR)/qml/QtQuick/Templates.2/libqtquicktemplates2plugin.a
              LIBS += $$(QTDIR)/qml/QtQuick/Controls.2/libqtquickcontrols2plugin.a
              LIBS += $$(QTDIR)/qml/QtGraphicalEffects/libqtgraphicaleffectsplugin.a
          }
      }
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            qt.team.quick.subscriptions Qt Quick and Widgets Team
            sinosoidal Nuno Santos
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes