Qt 运行时在QDialog窗口中嵌入QML对话框
我以前从未使用过QML,我甚至不知道下面的方法是否可行 我目前正在用现有代码和大量UI文件向Qt 5.5移植C++ QT应用程序。这个应用程序在运行时加载大量的C++插件DLL。现在每个插件都应该有自己的配置对话框;尽管这些插件目前都没有Qt依赖性 我目前正在考虑通过以下方式扩展接口:Qt 运行时在QDialog窗口中嵌入QML对话框,qt,qml,qtquick2,qt5.5,Qt,Qml,Qtquick2,Qt5.5,我以前从未使用过QML,我甚至不知道下面的方法是否可行 我目前正在用现有代码和大量UI文件向Qt 5.5移植C++ QT应用程序。这个应用程序在运行时加载大量的C++插件DLL。现在每个插件都应该有自己的配置对话框;尽管这些插件目前都没有Qt依赖性 我目前正在考虑通过以下方式扩展接口: class CPlugin { public: virtual std::string const& getQmlDescription() const; virt
class CPlugin {
public:
virtual std::string const& getQmlDescription() const;
virtual std::string const& getQmlFilePath() const;
};
因此,每个插件都可以返回一组QML数据,这些数据与它希望的配置对话框的外观有关
当用户配置此插件时,此应用程序将显示一个空的QDialog
,并要求插件“给我您的qml配置数据”;然后在空的QDialog
中呈现和执行
在运行时,是否可以根据字符串缓冲区或QML数据的文件路径来解释此QML数据并将其呈现为空的QDialog
底线:
QDialog
窗口中嵌入QML对话框
描述吗?还是这两种类型不能混合使用李>
没有理由使用
QDialog
。您可以这样做,但是使用光栅绘制引擎渲染QDialog
,您可以使用CPU将其与Qt Quick渲染到的OpenGL帧缓冲区合成。这将是一种严重的过早悲观
在您的场景中,来自插件的QML将被传递到QQuickView
。您还将发现插件需要访问QML引擎来设置上下文对象,以便将C++与QML接口,并登记它们的对象。您可以使用全局引擎实例,并将其传递给插件。或者,为了隔离它们,使用只为这些插件提供服务的专用引擎
Qt Quick非常灵活,因为您不必在单独的窗口中强制使用插件中的Qt Quick项目。您可以在移动设备的flickable前端中设置它们,桌面应用程序的可固定前端中设置它们,等等。插件中的可视项可以按照您希望的任何方式实例化-多次,在其他项中实例化,等等
因此,插件最好在引擎中注册它们的可视项类型,并让您的应用程序通过
加载程序决定如何使用这些类型,而不是简单地将原始QML传递给您处理。谢谢!大部分情况下:我已经让它工作了……:)