成员函数
1)QString errorString()
返回对发生的最后一个错误的描述。
2)QObject *instance()
返回插件的根组件对象,必要时加载插件。如果无法加载插件或无法实例化根组件对象,则该函数返回 nullptr。如果根组件对象被销毁,则调用此函数会创建一个新实例。该函数返回的根组件在 QPluginLoader 销毁时不会被删除。如果要确保删除根组件,则应在不再需要访问核心组件时立即调用unload()。当库最终卸载时,根组件将自动删除。
3)bool load()
用于加载指定的插件库文件,返回值表示是否加载成功。
4)void unload()
用于卸载已经加载的插件库。
用法举例
#include <QPluginLoader>
#include <QDebug>
void loadPlugins(const QString& pluginsDirPath)
{
QString pluginsPath = pluginsDirPath;
if (pluginsDirPath.isEmpty())
pluginsPath = QApplication::applicationDirPath();
QDir pluginsDir(pluginsPath);
pluginsDir.cd("Plugins");
QFileInfoList pluginsFile = pluginsDir.entryInfoList(QStringList() << "*.dll", QDir::Files);
foreach (const QFileInfo& fileInfo, pluginsFile)
{
QPluginLoader loader(fileInfo.absoluteFilePath());
if (loader.load())
{
QObject* plugin = loader.instance();
if (plugin)
{
// 这里假设我们知道插件的接口类型,并将其转换为特定的类型。
PluginInterface* pinterface = dynamic_cast<PluginInterface*>(plugin);
if (pinterface)
{
pinterface->install(PluginParam()); // 初始化插件
m_lstPluginInterFace.push_back(pinterface);
}
}
}
else
{
qDebug() << loader.errorString();
}
}
}
在这个示例中,我们首先获取插件的路径,然后使用QDir来获取所有插件文件的信息,然后遍历这些文件并使用QPluginLoader加载它们。如果加载成功,我们获取插件的实例并通过将其转换为特定的类型来使用它。如果加载失败,我们打印出错误信息。这个示例假设我们知道插件的接口类型并将其转换为特定的类型,实际上,这需要根据你的插件接口进行相应的调整。