Qt 如何从QML组合框组件公开属性?
我正在制作一个基于组合框的组件Qt 如何从QML组合框组件公开属性?,qt,qml,Qt,Qml,我正在制作一个基于组合框的组件 import QtQuick 2.12 import QtQuick.Controls 2.12 ComboBox { id: _ComboBox property alias textInBox: _delegateText.text delegate: ItemDelegate { contentItem: Text { id: _delegateText text: name
import QtQuick 2.12
import QtQuick.Controls 2.12
ComboBox {
id: _ComboBox
property alias textInBox: _delegateText.text
delegate: ItemDelegate {
contentItem: Text {
id: _delegateText
text: name
}
}
}
当我添加一行时:
属性别名textInBox:\u delegateText.text
,我没有启动程序就终止了程序
告诉我如何从外部设置文本属性?属性
contentItem
是一个组件
,因此无论您放在那里,它都像是在一个单独的文件中定义的
定义组件类似于定义QML文档。QML
文档有一个顶级项,用于定义行为和
属性,并且无法定义属性或行为
在顶级项目之外。同样,组件
定义包含单个顶级项(在上面的
示例是一个矩形),并且不能在此之外定义任何数据
项,但id除外(在上例中为
红方块)
Delegate从模型
中获取文本,因此您应该处理您的模型,而不是委托实例。在代理中,您通常通过modelData
属性访问文本,但可以对其进行自定义
没有命名角色的模型(如所示的ListModel
将通过modelData角色提供数据。这个
还为只有一个角色的模型提供了modelData角色。在里面
这种情况下,modelData角色包含与命名角色相同的数据
因此,这就是将文本分配给代理的方式
delegate: ItemDelegate {
contentItem: Text {
text: modelData
}
}
如果要修改它,只需修改模型
,就可以创建各种绑定。例如,这将起作用(尽管不推荐):
我找到了解决办法。根据组合框中转移的角色,将显示模型中相应的字段 ExComboBox.qml
import QtQuick 2.12
import QtQuick.Controls 2.12
ComboBox {
delegate: ItemDelegate {
contentItem: Text {
text: model[textRole]
}
}
}
您需要指定textRole:“name”
或模型中的任何其他字段,而不是“name”
main.qml
ExComboBox {
currentIndex: 0
model: GroupModel { }
textRole: "name"
}
<强>注: <代码> GROMPMODE 是我从C++代码中得到的模型。
可以使用或获取当前项的文本。如果您不想要当前项目的文本,那么有必要解释一下您的目标是什么,以便我们可以帮助您找到更好的方法。顺便说一句,我不能在Windows上使用Qt5.9.9、5.13.2或6.0(同时使用qmlscene和QtQuick应用程序)重现这种崩溃。可能是main.cpp中的某些内容导致它崩溃。@Mitch我查看了应用程序输出,发现有一个错误。错误:qrc:/modules/ExComboBox.qml:6:31:别名引用无效。找不到id“_delegateText”@Mitch我不想获取该值,但我想设置该值。您不应该从外部访问委托项。这是一种延迟加载,这样的项目从外部看不到。更重要的是,以命令式方式使用声明性语言是绝对错误的。您应该使用模型,并更新模型数据提供程序以更改值。如果您能告诉我们您的真正目的,我们可以提供适当的解决方案。ExComboBox {
currentIndex: 0
model: GroupModel { }
textRole: "name"
}