在 QML TableView 中显示 QStandardItemModel
Posted
技术标签:
【中文标题】在 QML TableView 中显示 QStandardItemModel【英文标题】:Display QStandardItemModel in a QML TableView 【发布时间】:2014-05-05 15:09:32 【问题描述】:我正在尝试使用 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()。 (如果您不想使用枚举,则不必使用)。
【问题讨论】:
我没有超载它。我做了一个尝试,在那里放了一个 qDebug 但它没有被调用(其他 qDebug 确实产生了输出)。我试图实现行和列计数,但它们似乎也没有被调用。我没有使用 QAbstractItemModel。引用文档QStandardItemModel implements the QAbstractItemModel interface
。也许我做错了,我对 C++ 中的 Qt 模型没有太多经验。如果您认为这是问题的原因,我应该在数据中输入什么?
【参考方案1】:
查看您的代码,问题出在以下几行:
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";
【讨论】:
我错误地推送了这个提交。但是我提交了它,因为奇怪的是,这并没有覆盖 0 值:我有两列的名称,而如果我只放一行,我只会得到名称。当我尝试应该做的正确事情(您的最后一个代码)时,我只显示名称列。我已经测试过该模型确实具有描述列的数据并且它们正确存在。我尝试了不同的索引(甚至 -1)、换行、更改了 C++ 和 QML 中的角色名称,但第二列仍然拒绝显示。 (从未设法以任何方式显示第二个) 感谢您的帮助。以上是关于在 QML TableView 中显示 QStandardItemModel的主要内容,如果未能解决你的问题,请参考以下文章
QML QT导入CSV文件并使用python在Tableview中显示