【发布时间】: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 也有其固有的缺陷......比如它根本不起作用。
标签: c++ qt model qml tableview