Skip to content
Snippets Groups Projects
Commit 2539eb71 authored by Andreas Traczyk's avatar Andreas Traczyk
Browse files

misc: circumvent QtCreator "module not found" bug

When registering into QML namespaces from a non-global context,
certain QtCreator versions fail to find import modules. The only
effect is a lack of correct "intellisense". We can register dummy
namespace into the QML module namespaces we use to quiet the IDE.

Change-Id: Ideb06541475788c669619be82c30d993554435a9
parent 980de92c
No related branches found
No related tags found
No related merge requests found
/*! /*
* Copyright (C) 2020 by Savoir-faire Linux * Copyright (C) 2020 by Savoir-faire Linux
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
* *
...@@ -62,8 +62,8 @@ ...@@ -62,8 +62,8 @@
#define QML_REGISTERTYPE(NS, T) qmlRegisterType<T>(NS, VER_MAJ, VER_MIN, #T); #define QML_REGISTERTYPE(NS, T) qmlRegisterType<T>(NS, VER_MAJ, VER_MIN, #T);
#define QML_REGISTERNAMESPACE(T, NAME) \ #define QML_REGISTERNAMESPACE(NS, T, NAME) \
qmlRegisterUncreatableMetaObject(T, NS_MODELS, VER_MAJ, VER_MIN, NAME, "") qmlRegisterUncreatableMetaObject(T, NS, VER_MAJ, VER_MIN, NAME, "")
#define QML_REGISTERUNCREATABLE(N, T) \ #define QML_REGISTERUNCREATABLE(N, T) \
qmlRegisterUncreatableType<T>(N, VER_MAJ, VER_MIN, #T, "Don't try to add to a qml definition of " #T); qmlRegisterUncreatableType<T>(N, VER_MAJ, VER_MIN, #T, "Don't try to add to a qml definition of " #T);
...@@ -81,6 +81,16 @@ namespace Utils { ...@@ -81,6 +81,16 @@ namespace Utils {
void void
registerTypes() registerTypes()
{ {
// Hack for QtCreator autocomplete (part 2)
// https://bugreports.qt.io/browse/QTCREATORBUG-20569
// Use a dummy object to register the import namespace.
// This occurs when we register from within MainApplication
QML_REGISTERNAMESPACE(NS_MODELS, dummy::staticMetaObject, "");
QML_REGISTERNAMESPACE(NS_ADAPTERS, dummy::staticMetaObject, "");
QML_REGISTERNAMESPACE(NS_CONSTANTS, dummy::staticMetaObject, "");
QML_REGISTERNAMESPACE(NS_HELPERS, dummy::staticMetaObject, "");
QML_REGISTERNAMESPACE(NS_ENUMS, dummy::staticMetaObject, "");
// QAbstractListModels // QAbstractListModels
QML_REGISTERTYPE(NS_MODELS, AccountListModel); QML_REGISTERTYPE(NS_MODELS, AccountListModel);
QML_REGISTERTYPE(NS_MODELS, DeviceItemListModel); QML_REGISTERTYPE(NS_MODELS, DeviceItemListModel);
...@@ -112,13 +122,13 @@ registerTypes() ...@@ -112,13 +122,13 @@ registerTypes()
QML_REGISTERSINGLETONTYPE_WITH_INSTANCE(NameDirectory); QML_REGISTERSINGLETONTYPE_WITH_INSTANCE(NameDirectory);
// Lrc namespaces, models, and singletons // Lrc namespaces, models, and singletons
QML_REGISTERNAMESPACE(lrc::api::staticMetaObject, "Lrc"); QML_REGISTERNAMESPACE(NS_MODELS, lrc::api::staticMetaObject, "Lrc");
QML_REGISTERNAMESPACE(lrc::api::account::staticMetaObject, "Account"); QML_REGISTERNAMESPACE(NS_MODELS, lrc::api::account::staticMetaObject, "Account");
QML_REGISTERNAMESPACE(lrc::api::call::staticMetaObject, "Call"); QML_REGISTERNAMESPACE(NS_MODELS, lrc::api::call::staticMetaObject, "Call");
QML_REGISTERNAMESPACE(lrc::api::datatransfer::staticMetaObject, "Datatransfer"); QML_REGISTERNAMESPACE(NS_MODELS, lrc::api::datatransfer::staticMetaObject, "Datatransfer");
QML_REGISTERNAMESPACE(lrc::api::interaction::staticMetaObject, "Interaction"); QML_REGISTERNAMESPACE(NS_MODELS, lrc::api::interaction::staticMetaObject, "Interaction");
QML_REGISTERNAMESPACE(lrc::api::video::staticMetaObject, "Video"); QML_REGISTERNAMESPACE(NS_MODELS, lrc::api::video::staticMetaObject, "Video");
QML_REGISTERNAMESPACE(lrc::api::profile::staticMetaObject, "Profile"); QML_REGISTERNAMESPACE(NS_MODELS, lrc::api::profile::staticMetaObject, "Profile");
// Same as QML_REGISTERUNCREATABLE but omit the namespace in Qml // Same as QML_REGISTERUNCREATABLE but omit the namespace in Qml
QML_REGISTERUNCREATABLE_IN_NAMESPACE(NewAccountModel, lrc::api); QML_REGISTERUNCREATABLE_IN_NAMESPACE(NewAccountModel, lrc::api);
......
/*! /*
* Copyright (C) 2020 by Savoir-faire Linux * Copyright (C) 2020 by Savoir-faire Linux
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> * Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
* *
...@@ -30,6 +30,13 @@ ...@@ -30,6 +30,13 @@
#define VER_MAJ 1 #define VER_MAJ 1
#define VER_MIN 0 #define VER_MIN 0
// Hack for QtCreator autocomplete (part 1)
// https://bugreports.qt.io/browse/QTCREATORBUG-20569
namespace dummy {
Q_NAMESPACE
Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
} // namespace dummy
// clang-format off // clang-format off
#define QML_REGISTERSINGLETONTYPE_POBJECT(NS, I, N) \ #define QML_REGISTERSINGLETONTYPE_POBJECT(NS, I, N) \
QQmlEngine::setObjectOwnership(I, QQmlEngine::CppOwnership); \ QQmlEngine::setObjectOwnership(I, QQmlEngine::CppOwnership); \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment