summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp12
-rw-r--r--src/corelib/plugin/qlibrary_p.h3
-rw-r--r--src/corelib/plugin/qplugin.h16
-rw-r--r--src/corelib/plugin/qpluginloader.cpp48
-rw-r--r--src/corelib/plugin/qpluginloader.h2
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp2
6 files changed, 67 insertions, 16 deletions
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index 3c8e00519b..a3e809a266 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -235,13 +235,10 @@ QList<QJsonObject> QFactoryLoader::metaData() const
for (int i = 0; i < d->libraryList.size(); ++i)
metaData.append(d->libraryList.at(i)->metaData);
- QVector<QStaticPlugin> staticPlugins = QLibraryPrivate::staticPlugins();
- for (int i = 0; i < staticPlugins.count(); ++i) {
- const char *rawMetaData = staticPlugins.at(i).metaData();
- QJsonObject object = QLibraryPrivate::fromRawMetaData(rawMetaData).object();
+ foreach (const QStaticPlugin &plugin, QPluginLoader::staticPlugins()) {
+ const QJsonObject object = plugin.metaData();
if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size()))
continue;
-
metaData.append(object);
}
return metaData;
@@ -269,10 +266,9 @@ QObject *QFactoryLoader::instance(int index) const
}
index -= d->libraryList.size();
- QVector<QStaticPlugin> staticPlugins = QLibraryPrivate::staticPlugins();
+ QVector<QStaticPlugin> staticPlugins = QPluginLoader::staticPlugins();
for (int i = 0; i < staticPlugins.count(); ++i) {
- const char *rawMetaData = staticPlugins.at(i).metaData();
- QJsonObject object = QLibraryPrivate::fromRawMetaData(rawMetaData).object();
+ const QJsonObject object = staticPlugins.at(i).metaData();
if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size()))
continue;
diff --git a/src/corelib/plugin/qlibrary_p.h b/src/corelib/plugin/qlibrary_p.h
index abf11be9f7..20b0c7e20f 100644
--- a/src/corelib/plugin/qlibrary_p.h
+++ b/src/corelib/plugin/qlibrary_p.h
@@ -98,9 +98,6 @@ public:
static QStringList suffixes_sys(const QString &fullVersion);
static QStringList prefixes_sys();
- static QVector<QStaticPlugin> staticPlugins();
-
-
QPointer<QObject> inst;
QtPluginInstanceFunction instance;
QJsonObject metaData;
diff --git a/src/corelib/plugin/qplugin.h b/src/corelib/plugin/qplugin.h
index b91a0e9900..1ec9325e5e 100644
--- a/src/corelib/plugin/qplugin.h
+++ b/src/corelib/plugin/qplugin.h
@@ -44,6 +44,7 @@
#include <QtCore/qobject.h>
#include <QtCore/qpointer.h>
+#include <QtCore/qjsonobject.h>
QT_BEGIN_NAMESPACE
@@ -59,11 +60,22 @@ QT_BEGIN_NAMESPACE
typedef QObject *(*QtPluginInstanceFunction)();
typedef const char *(*QtPluginMetaDataFunction)();
-struct QStaticPlugin
+struct Q_CORE_EXPORT QStaticPlugin
{
+ // Note: This struct is initialized using an initializer list.
+ // As such, it cannot have any new constructors or variables.
+#ifndef Q_QDOC
QtPluginInstanceFunction instance;
- QtPluginMetaDataFunction metaData;
+ QtPluginMetaDataFunction rawMetaData;
+#else
+ // Since qdoc gets confused by the use of function
+ // pointers, we add these dummes for it to parse instead:
+ QObject *instance();
+ const char *rawMetaData();
+#endif
+ QJsonObject metaData() const;
};
+Q_DECLARE_TYPEINFO(QStaticPlugin, Q_PRIMITIVE_TYPE);
void Q_CORE_EXPORT qRegisterStaticPluginFunction(QStaticPlugin staticPlugin);
diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp
index 5a59942aad..46844acb01 100644
--- a/src/corelib/plugin/qpluginloader.cpp
+++ b/src/corelib/plugin/qpluginloader.cpp
@@ -107,6 +107,33 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \class QStaticPlugin
+ \inmodule QtCore
+ \since 5.2
+
+ \brief QStaticPlugin is a struct containing a reference to a
+ static plugin instance together with its meta data.
+
+ \sa QPluginLoader, {How to Create Qt Plugins}
+*/
+
+/*!
+ \fn QObject *QStaticPlugin::instance()
+
+ Returns the plugin instance.
+
+ \sa QPluginLoader::staticInstances()
+*/
+
+/*!
+ \fn const char *QStaticPlugin::rawMetaData()
+
+ Returns the raw meta data for the plugin.
+
+ \sa metaData(), Q_PLUGIN_METADATA()
+*/
+
+/*!
Constructs a plugin loader with the given \a parent.
*/
QPluginLoader::QPluginLoader(QObject *parent)
@@ -407,6 +434,7 @@ void Q_CORE_EXPORT qRegisterStaticPluginFunction(QStaticPlugin plugin)
/*!
Returns a list of static plugin instances (root components) held
by the plugin loader.
+ \sa staticPlugins()
*/
QObjectList QPluginLoader::staticInstances()
{
@@ -419,8 +447,14 @@ QObjectList QPluginLoader::staticInstances()
return instances;
}
-
-QVector<QStaticPlugin> QLibraryPrivate::staticPlugins()
+/*!
+ Returns a list of QStaticPlugins held by the plugin
+ loader. The function is similar to \l staticInstances()
+ with the addition that a QStaticPlugin also contains
+ meta data information.
+ \sa staticInstances()
+*/
+QVector<QStaticPlugin> QPluginLoader::staticPlugins()
{
StaticPluginList *plugins = staticPluginList();
if (plugins)
@@ -428,6 +462,16 @@ QVector<QStaticPlugin> QLibraryPrivate::staticPlugins()
return QVector<QStaticPlugin>();
}
+/*!
+ Returns a the meta data for the plugin as a QJsonObject.
+
+ \sa rawMetaData()
+*/
+QJsonObject QStaticPlugin::metaData() const
+{
+ return QLibraryPrivate::fromRawMetaData(rawMetaData()).object();
+}
+
QT_END_NAMESPACE
#endif // QT_NO_LIBRARY
diff --git a/src/corelib/plugin/qpluginloader.h b/src/corelib/plugin/qpluginloader.h
index 8f8833e839..88c8ba4fa0 100644
--- a/src/corelib/plugin/qpluginloader.h
+++ b/src/corelib/plugin/qpluginloader.h
@@ -43,6 +43,7 @@
#define QPLUGINLOADER_H
#include <QtCore/qlibrary.h>
+#include <QtCore/qplugin.h>
#ifndef QT_NO_LIBRARY
@@ -65,6 +66,7 @@ public:
QJsonObject metaData() const;
static QObjectList staticInstances();
+ static QVector<QStaticPlugin> staticPlugins();
bool load();
bool unload();
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 663f664d94..0f224c4909 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
@@ -765,7 +765,7 @@ void tst_QGuiApplication::genericPluginsAndWindowSystemEvents()
QStaticPlugin testPluginInfo;
testPluginInfo.instance = qt_plugin_instance;
- testPluginInfo.metaData = qt_plugin_query_metadata;
+ testPluginInfo.rawMetaData = qt_plugin_query_metadata;
qRegisterStaticPluginFunction(testPluginInfo);
int argc = 3;
char *argv[] = { const_cast<char*>("tst_qguiapplication"), const_cast<char*>("-plugin"), const_cast<char*>("testplugin") };