c++ - 如何在不使用委托(delegate)的情况下在 QML 中显示模型数据

标签 c++ qt qml qt5

我有一个简单的 QML 表单,其中仅包含输入框。该表单还有两个按钮“后退”和“前进”。

由数据填充的表单,包含在 QT 模型的一行中。按钮用于更改当前显示在表单中的行。

我怎样才能完成这个用例?比如说,对于 Qt 5.9

UPD:我找到了模型的“对象实例”类型。或许就是这样?我解释了我的担忧:我的任务是否常见并且有推荐的解决方案,或者不是 - 这是特殊且非标准的东西。

最佳答案

我猜你想要的是类似 QDataWidgetMapper 的东西但在 QML 中。

如果您使用 QAbstractItemModel(QML ListModel 就是其中之一),您可以通过监听 dataChanged 在 C++ 中重新创建您自己的模型,rowsInserted/rowsRemoved 信号和 friend 。

幸运的是,我也需要它并且已经写了它,无耻的插件:https://github.com/oKcerG/QmlModelHelper

在您的情况下,您可以像这样使用它:

property int currentIndex: 0
readonly property QtObject mappedData: myModel.ModelHelper.map(currentIndex) 
TextField {
    text: parent.mappedData.someTextRole
    onAccepted: parent.mappedData.someTextRole = text
}
Button {
    text: "previous"
    enabled: parent.currentIndex > 0
    onClicked: --parent.currentIndex
}
Button {
    text: "next"
    enabled: parent.currentIndex < myModel.ModelHelper.count - 1
    onClicked: ++parent.currentIndex
}

关于c++ - 如何在不使用委托(delegate)的情况下在 QML 中显示模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59199591/

相关文章:

android - QML 虚拟键盘尺寸

c++ - 将 QList<customobj *> 暴露给 QML

c++ - c++ 目标文件应该只通过 g++ 链接吗?

c++ - 将任意数表示为四个素数之和

c++ - 如何在boost python中公开派生类函数

c++ - 在 move 之前获取右值引用的地址是否安全?

android - 使用 Qt Quick Controls 的移动应用程序的结构

qt - QML 中的自定义附加属性

c++ - 检测是否按下了 QScrollBar 的箭头按钮

QtQuick 矩形控件显示什么边框?