gpt4 book ai didi

c++ - 如何从 QByteArray 使用 QPluginLoader 加载插件

转载 作者:行者123 更新时间:2023-11-30 04:21:03 25 4
gpt4 key购买 nike

QPluginLoader类不提供从 QByteArray 加载 Qt 插件的方法.如何从 QByteArray 加载插件?

在我的例子中,插件是通过标准输入发送给程序的。这就是为什么它们不能作为文件提供。

最佳答案

您可以先将 QByteArray 保存到 QTemporaryFile然后用QPluginLoader加载它

void load_plugin_from_bytearray(const QByteArray &array) {
QTemporaryFile file;
file.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner);
if (file.open()) {
qint64 bytes_written = file.write(array);
if (bytes_written != array.size()) {
throw std::runtime_error("Writing to temporary file failed");
}
} else {
throw std::runtime_error("Could not open temporary file");
}
QPluginLoader loader(file.fileName());
QObject *plugin = loader.instance();
if (plugin) {
do_something_with_plugin(plugin);
} else {
throw std::runtime_error(loader.errorString().toStdString());
}
}

不幸的是,如果您有多个插件并且需要多次运行我们的函数 load_plugin_from_bytearray,这可能不起作用,因为 QTemporaryFile 可能偶然重用临时文件的相同文件路径,而 QPluginLoader 是缓存其加载的插件。我需要对此进行更多调查。无论如何,您可以通过为每个 QTemporaryFile 提供不同的 templateName 来使临时文件路径唯一来避免该问题

QTemporaryFile::QTemporaryFile(const QString & templateName)

关于c++ - 如何从 QByteArray 使用 QPluginLoader 加载插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14830630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com