QML:如何将动态创建的组件与自定义的内部对象一起使用
QML: How to use a dynamically created component with a customized internal object?
我正在寻找一种动态创建组件和对象的方法,并使用组件。似乎大多数可用的示例,如Qt文档或其他StackOverflow帖子中的示例,都与使用createObject()返回的对象有关,而我希望使用包含(自定义)对象的组件。
我去掉了很多无关的细节(例如,CustomContainer被推到StackViews上/弹出),但下面的代码有望说明我要做的事情……基本上,我希望有一个foo=10和bar=10的CustomControl矩形,但它似乎是用默认值加载的。将有多个"自定义控件"类型和多个"定制容器"对象,所以我需要能够通用地支持这一点。
Qt文档讨论了创建上下文,我认为这是我的问题,但我不确定如何解决这个问题。我更喜欢纯QML解决方案,但如果C++就是解决方案的所在,那就可以了。
Main.qml:
CustomContainer {
id: myCustomContainer
}
CustomContainer {
id: myOtherCustomContainer
}
function addCustomControl( control, args ) {
var newComponent = Qt.createComponent( control )
var newObj = newComponent.createObject( myCustomContainer, args )
return newComponent
}
myCustomContainer.loaderSource = addCustomControl( "CustomControl.qml", { "foo": 10, "bar": 10 } )
myOtherCustomContainer.loaderSource = addCustomControl( "CustomControl.qml", { "foo": 20, "bar": 20 } )
CustomControl.qml:
Rectangle {
property int foo: 5
property int bar: 5
}
CustomContainer.qml:
Item {
property Component loaderSource
onLoaderSourceChanged: {
myLoader.sourceComponent = loaderSource
}
Loader {
id: myLoader
onSourceComponentChanged: {
doStuff()
}
}
}
组件不"包含对象"。该组件是要实例化的对象的原型。把它想象成C++中的一个"类型"或class
或struct
,而不是该类型的实例。
您的代码创建组件,然后从中创建一个具有修改后的属性值的对象,但该组件仍然具有其默认属性,因此将其用作源组件将生成具有默认属性的对象。
此外,Loader
将为您进行自动动态实例化。所以你不需要手动和自动结合,要么手动,要么让加载器来做
最后,但并非最不重要的是,当组件由StackView
实例化时,它们将自动填充它,并且它们的大小将绑定到它,因此它将随着StackView
大小的变化而自动更改。因此,只需使用Item
,将您的内容放在其中并进行布局。只有根项目的大小将绑定到StackView
大小,其子项目将有自己的大小。
- 如何使用 STL 排序对具有模板专用化的自定义类对象进行排序?
- 如何从 cpp 中的函数返回自定义类对象?
- 如何为自定义模板对象创建专门的函数模板
- 自定义类对象的C++向量 - 复制构造函数已删除 - std::ifstream
- 如何在unordered_set hasher的自定义类对象的函数中求解此错误
- ffmpeg avformat_open_input带有自定义流对象
- 在类构造函数中初始化自定义结构对象的正确方法
- 自定义类对象及其<运算符集
- 在返回之前等待输出的自定义QProcess对象
- C ,在WXWIDGETS中传递自定义类对象
- C 使用与自定义类对象的列表容器,列表:: Sort函数实际上并未对我的数据进行排序
- 自定义类对象的向量的std::find的返回值
- accept上的QDialog返回自定义类对象
- 在std::list中就地创建自定义类型对象
- 使用std::sort与自定义排序对象和数据类型模板-寻找正确的语法
- 如何为 Boost.Asio 设计自定义 IO 对象
- QT - 拖放 - 在自定义场景上创建自定义图形对象的位置
- 初始化列表中的自定义类对象
- 循环访问自定义分类对象的列表
- 我应该怎么做才能使用自定义类对象的 QVector 将信号发送到插槽