QML TableView 模型静默失败?
Posted
技术标签:
【中文标题】QML TableView 模型静默失败?【英文标题】:QML TableView Model Silently Failing? 【发布时间】:2020-11-02 15:05:18 【问题描述】:编辑:添加了一些说明
使用 QML 5.14
TableView 的model
属性似乎不想显示QList<int>
或int
的任何变体,无论是qint8
、qint32
等。我可以使它与无符号@ 一起使用987654327@,但是我需要在我的应用程序中保留负值范围。
我发现信息正在进入 qml 层,因为当我调用时:
console.log("cfs.amounts is " + cfs.amounts)
console.log("model is " + model)
console.log("modellength is " + model.length)
我实际上得到了预期的控制台输出:
qml: cfs.amounts is 11,12
qml: model is 11,12
qml: modellength is 2
我通过直接向 TableView 传递数据(即 model: [11, 22]
)确保 TableView 正常工作,并且它正确显示,即它显示索引 0, 1
。但是,当我将cfs.amounts
传递给它时,我根本无法让它显示任何东西,这是c++ 中的QList<int>
。所以根据console.log
,模型数据在那里,它是正确的,它从c++传递到qml没有问题,而且长度很好——TableView只是无法显示它。
我唯一能想到的是,TableView 默默地无法显示带符号整数的数组。但是我也可能完全错了,因为我无法获得 Repeater
项目在其model
中识别它,也不是。我已经搜索过,但我找不到关于这个主题的任何错误报告。有人对如何让 qml 模型识别通过的 QList<int>
有任何建议吗?这一切都在 QML 5.14 中。
cashflowschedule.h
#ifndef CASHFLOWSCHEDULE_H
#define CASHFLOWSCHEDULE_H
#include "QObject"
#include "QList"
class CashFlowSchedule : public QObject
Q_OBJECT
Q_PROPERTY(QList<int> amounts READ amounts)
public:
CashFlowSchedule() ;
QList<int> amounts() return 11,12;
;
#endif // CASHFLOWSCHEDULE_H
main.qml
import QtQuick 2.14
import QtQuick.Window 2.14
import cpps 1.0
Window
visible: true
width: 640
height: 480
CashFlowSchedule id: cfs
TableView
anchors.fill: parent
model: cfs.amounts
delegate: Text text: index
Component.onCompleted:
console.log("cfs.amounts is " + cfs.amounts)
console.log("model is " + model)
包含在 main.cpp 中
#include "cashflowschedule.h"
...
qmlRegisterType<CashFlowSchedule>("cpps", 1, 0, "CashFlowSchedule");
...
【问题讨论】:
现在,您使用的是text: index
,它只会显示索引。你试过text: modelData
吗?
正确。我打算只显示索引。目前,text: index
没有显示任何内容
编辑:而且,text: modelData
的行为也类似。
QVariantList 也有其固有的缺陷......比如它根本不起作用。
这能回答你的问题吗? QList<int> cannot be used as a model for Repeater
【参考方案1】:
QList<int>
不是用于模型的官方支持的 C++ 类型之一(参见列表here)。 bug report 的存在是为了澄清关于这一点的文档。 QVariantList 是一个很好的替代方案。
【讨论】:
以上是关于QML TableView 模型静默失败?的主要内容,如果未能解决你的问题,请参考以下文章
这种将 C++ QStringList 加载为 QML ListView 模型的方式有啥问题?
QML TableView 鼠标区域不会将点击传播到选择模型
如何将 Qt 中的 SQL 查询输出模型分配给 QML 的 TableView?
Qt5 - 在 QML TableView 中显示动态数据模型