在QML TableView中显示QStandardItemModel

时间:2014-05-05 15:09:32

标签: qt model qml

我试图在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)。

1 个答案:

答案 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";