我是一个使用Qt和QML的初学者,我似乎无法找到问题的答案。目前在我的程序中,我有一个窗口,提示用户有6个未知数。最后,在用户单击下一个按钮后,我想将用户输入的6个文本编辑内容保存为整数变量,并使用它们为模拟进行一些计算。现在我有一个ListView,它包含6个必需变量的text / formatting / TextEdits 我怎么......
在列表视图中访问这些TextEdits,并在用户单击按钮后将其保存为整数
此外,如何在用户点击下一步后清除所有内容或打开一个新窗口以显示可视化模拟
由于
答案 0 :(得分:3)
如何在列表视图中访问这些TextEdits,并在用户单击按钮后将其保存为整数
此方法存在问题:如果列表视图中的项目超出视图范围,则可以销毁这些项目。如果您的视图足以容纳所有项目,那么这不是问题,但更安全的方法是在用户键入模型时将答案存储在模型中:
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Column {
anchors.centerIn: parent
ListView {
id: listView
width: 200
height: 300
spacing: 10
model: ListModel {
Component.onCompleted: {
for (var i = 0; i < 6; ++i) {
append({ question: "Blah?", answer: "" });
}
}
}
delegate: Column {
Label {
text: model.question
}
TextEdit {
width: 200
onTextChanged: model.answer = text
Rectangle {
anchors.fill: parent
color: "transparent"
border.color: "grey"
}
}
}
}
Button {
text: qsTr("Print answers")
onClicked: {
for (var i = 0; i < listView.count; ++i) {
var modelItem = listView.model.get(i);
print("Answer to" + modelItem.question + " is: " + modelItem.answer);
}
}
}
}
}
如何在用户点击下一个
后清除所有内容或打开一个新窗口以显示可视化模拟
我建议使用StackView
:
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
StackView {
id: stackView
initialItem: questionPage
anchors.fill: parent
}
Component {
id: questionPage
Column {
ListView {
id: listView
width: 200
height: 300
spacing: 10
model: ListModel {
Component.onCompleted: {
for (var i = 0; i < 6; ++i) {
append({ question: "Blah?", answer: "" });
}
}
}
delegate: Column {
Label {
text: model.question
}
TextEdit {
width: 200
onTextChanged: model.answer = text
Rectangle {
anchors.fill: parent
color: "transparent"
border.color: "grey"
}
}
}
}
Button {
text: qsTr("Next page")
onClicked: stackView.push(nextPage)
}
}
}
Component {
id: nextPage
Label {
text: qsTr("This is the next page!")
}
}
}