首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QML QStandardItemModel TableView中显示TableView

在QML QStandardItemModel TableView中显示TableView
EN

Stack Overflow用户
提问于 2014-05-05 15:09:32
回答 1查看 1.5K关注 0票数 1

我试图在QML中显示一个带有Qt控件TableView的TableView子类。

模型类如下所示:

代码语言:javascript
复制
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代码如下:

代码语言:javascript
复制
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()。(如果你不想使用枚举的话)。

EN

回答 1

Stack Overflow用户

发布于 2014-05-06 19:27:19

看看您的代码,问题来自以下几行:

代码语言:javascript
复制
roles[0] = "name";
roles[0] = "desc";

如您所见,您首先将" name“设置为角色0,然后用"desc”名称覆盖该值。尝试更改它,以便它们有不同的索引。

代码语言:javascript
复制
roles[0] = "name";
roles[1] = "desc";

您现在应该使用这个名称了。第二个问题来自这样一个事实:您正在注册"desc“角色,但是在qml中使用"description”角色。因此,可以修改c++或qml中的角色名,以便它们匹配。

代码语言:javascript
复制
roles[0] = "name";
roles[1] = "description";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23475851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档