我试图在QML中使用Qt Controls TableView显示QStandardItemModel子类。
模型类如下所示:
class CommandModel : public QStandardItemModel {
Q_OBJECT
public:
CommandModel(QObject *parent = 0);
private slots:
void startProcess();
// and other thing that only fetch data and use appendRow()
// to add the data to the model.
};
该模型目前是一个包含两列的表(命令名称及其描述)。
我使用QQmlApplicationEngine和QQuickWindow来显示QML。
QML代码如下:
TableView {
id: tableview
model: commandModel
TableViewColumn {
title: qsTr("Command")
role: "name"
}
TableViewColumn {
title: qsTr("Description")
role: "description"
}
}
显示TableView,显示行(如果我没有弄错,那么行数正确),但它们只会消隐行。
模型在完成加载之前传递给QML上下文。我不认为这是问题,因为我第一次看到一张空桌子,然后是一张有许多空行的桌子。
我不知道如何定义哪个列对应于哪个角色。
欢迎并感谢任何帮助。
编辑:代码可以在这里找到:https://github.com/martinqt/Symfony2Helper
EDIT2:我通过重新实现roleNames得到了一个随机工作的第一列(或者因为它似乎是随机奇怪的。)
EDIT2.1:实际上,它是setItemRoleNames(),可以显示第一列。
EDIT3:问题更像this。我试着看看它是否能解决它。
解决方案:this解决了整个问题。实现data()和roleNames()。 (如果你不想,不要使用enum)。
答案 0 :(得分:0)
查看代码,问题来自以下几行:
roles[0] = "name";
roles[0] = "desc";
如您所见,您首先将“name”设置为角色0,然后使用“desc”名称覆盖该值。尝试更改它以使它们具有不同的索引。
roles[0] = "name";
roles[1] = "desc";
你现在应该有名字了。第二个问题来自于您正在注册“desc”角色,但在qml中使用“description”角色。因此,修改c ++或qml中的角色名称,使它们匹配。
roles[0] = "name";
roles[1] = "description";