【发布时间】:2017-04-07 22:50:43
【问题描述】:
我正在使用 HsQML 构建应用程序。这是我第一次接触 QML,第二次接触 Qt,也是第一次接触 Haskell 的大型项目,请原谅我的无知。
在 UI 中,我有一个 TabView。第一个选项卡包含一个绑定到模型并显示项目列表的 ListView。双击 ListView 中的项目会打开一个新选项卡,其中包含正确显示该项目详细信息的组件(我的猜测是由于新选项卡从被单击的列表项继承其上下文)。
现在,我的目标是打开一个选项卡,在其中为该模型创建一个新项目。这个想法是创建一个空白数据项(可选地将其添加到模型中),并将其“加载”到用于编辑现有项的相同组件类型中。我搜索了 QML 的文档,甚至找不到任何与远程相关的东西,这让我觉得这种方法完全有缺陷。
TabView {
id : rootTabs
Tab {
ListView {
model : AutoListModel {
source : workflowModel // this is sort of HsQML specific, data comes as a list from Haskell
}
delegate : Rectangle {
Text {
text : modelData.name
}
MouseArea {
anchors.fill : parent
// this part works because the new component inherits its modelData from the current context
// so the new tab has correct data
onDoubleClicked : {
rootTabs.addTab(modelData.name, Qt.createComponent("WorkflowView.qml"))
rootTabs.currentIndex = rootTabsCount - 1
}
}
}
}
Button {
text : "Create workflow"
// this is the part in question - how do I assign the newly appended data to comp?
onClicked : {
wModel.appendBlank()
comp = Qt.createComponent("WorkflowView.qml")
var tab = rootTabs.addTab("New workflow", comp)
comp.statusChanged.connect(tabLoaded)
}
}
}
}
WorkflowEdit.qml:
Rectangle {
TextField {
id : nameInput
text : modelData.name
Binding {
target : modelData
property : "name"
value : nameInput.text
}
}
}
【问题讨论】:
-
新标签有正确数据是什么意思?看起来您只是在创建一个 WorkflowView 组件,仅此而已。您可以发布该 qml 文件的代码吗?
-
正确,我只是在创建一个 WorkflowView。但是,当通过双击 ListView 项目创建它时,它的 modelData 似乎包含该项目的相应数据......这完全是魔术。现在,我希望能够以编程方式执行相同的操作,以便
WorkflowView的modelData将引用我想要的模型中的项目。添加了一个示例WorkflowView,反正真的很简单。