Details
-
Bug
-
Resolution: Duplicate
-
Not Evaluated
-
None
-
5.8.0 Beta
-
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 } }