我有4个qml文件和一个main.cpp来加载qml文件。 是否有可能为这4个qml文件创建1个dll文件。 并在不同的应用程序中使用它,如果是的话如何做到这一点。如何在QT/QML中创建共享库
2
A
回答
2
看一看的文档QML Modules
存在用于QML-只有模块的选项,C++之用,混合模式。
3
如前所述,不需要仅将qml文件嵌入库中。但是,当然,你有权做到你想做的一切,即使是那样。我知道至少有2种方式来做到这一点:
1.创建二进制资源文件
准备含QML文件的资源文件,然后编译:
rcc -binary plugin.qrc -o plugin.rcc
现在你可以包含这个文件到您的应用:
QResource::registerResource("plugin.rcc");
,并把它作为常规的QRC文件:
QResource::registerResource(qApp->applicationDirPath() + "/plugin.rcc");
QQuickView *view = new QQuickView();
view->setSource(QUrl("qrc:/qml/myfile.qml"));
这里qml/
是资源文件中的前缀。
2.共享库
另一种方法是创建一个包含相同资源文件的共享库。例如下面的接口插件的共享库可实现:
interface.h
#ifndef PLUGIN_INTERFACE_H
#define PLUGIN_INTERFACE_H
#include <QString>
#include <QObject>
class PluginInterface
{
public:
virtual ~PluginInterface() {}
virtual QByteArray getQML(const QString &name) = 0;
};
#define PluginInterface_iid "org.qt-project.PluginInterface"
Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid)
#endif
及其实施是:
QByteArray PluginImpl::getQML(const QString &name)
{
QFile file(":/qml/" + name);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return QByteArray();
return file.readAll();
}
现在,在您的应用程序加载插件,并以字符串形式获取其资源:
QDir pluginsDir(qApp->applicationDirPath());
QPluginLoader pluginLoader(pluginsDir.absoluteFilePath("plugin.dll"));
QObject *plugin = pluginLoader.instance();
if (plugin) {
PluginInterface *pluginInstance = qobject_cast<PluginInterface *>(plugin);
if (pluginInstance) {
QByteArray content = pluginInstance->getQML("file1.qml");
QQuickView *view = new QQuickView();
QQmlComponent component(view->engine());
component.setData(content, QUrl());
QQuickItem *childItem = qobject_cast<QQuickItem*>(component.create());
childItem->setParentItem(view->contentItem());
QWidget *container = QWidget::createWindowContainer(view);
container->setFocusPolicy(Qt::TabFocus);
ui->verticalLayout->addWidget(container);
}
}
但是请注意,在部署应用程序时,您必须复制所有qml系统文件,如#QTPATH/qml/QtQml,#QTPATH/qml/QtQuick.2,#QTPATH/qml/QtQuick.2等
链接:
+0
在Win和MacOS上部署部署工具正确识别的依赖项时,授予使用'qmldir'参数的权限。如果我是你,我的世界已经补充说。顺便说一句好的答案。 – BaCaRoZzo
相关问题
- 1. 如何用cmake创建共享库?
- 2. 如何使用ld创建共享库?
- 3. 创建Grails共享库
- 4. 从C++创建共享库
- 5. 创建Oozie共享库
- 6. 吉斯:创建共享库
- 7. 创建最小共享库
- 8. 如何在C++中创建和使用共享库
- 9. 如何在automake脚本中创建共享库(.so)?
- 10. 如何加载在Matlab中创建的共享库
- 11. C++共享库创建 - 与其他共享库链接
- 12. 创建另一个共享库时链接共享库
- 13. 使用另一个共享库创建共享库
- 14. 如何从对象或静态库创建共享库
- 15. 如何从redis源代码创建共享库或静态库?
- 16. 如何在使用共享库的同时创建Java项目?
- 17. 如何在Linux上创建存根共享库
- 18. 通过Eclipse CDT创建共享库
- 19. 使用Webpack的DllPlugin创建共享库
- 20. 使用gcc创建共享库
- 21. 创建静态和共享C++库
- 22. 共享库创建软链接
- 23. 创建共享库时链接错误
- 24. libtool如何决定构建共享库?
- 25. 如何将glfw构建为共享库?
- 26. 如何构建共享的MuPDF库?
- 27. 如何使用waf构建共享库?
- 28. 如何共享公共库中Jboss7
- 29. 如何在共享对象库中共享变量
- 30. 如何在PlasticSCM中使用共享配置库共享ignore.conf?
你为什么要这样做?如果它只有qml文件,只需将qml文件复制到其他应用程序。完成。 – MrBlueSky