QML - 如何从列表视图中的文本编辑中检索信息

时间:2016-07-20 03:29:25

标签: qt qml qtquick2

我是一个使用Qt和QML的初学者,我似乎无法找到问题的答案。目前在我的程序中,我有一个窗口,提示用户有6个未知数。最后,在用户单击下一个按钮后,我想将用户输入的6个文本编辑内容保存为整数变量,并使用它们为模拟进行一些计算。现在我有一个ListView,它包含6个必需变量的text / formatting / TextEdits 我怎么......

  • 在列表视图中访问这些TextEdits,并在用户单击按钮后将其保存为整数

  • 此外,如何在用户点击下一步后清除所有内容或打开一个新窗口以显示可视化模拟

由于

1 个答案:

答案 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!")
        }
    }
}