QML TableView with dynamic number of columns

前端 未结 2 1138
[愿得一人]
[愿得一人] 2020-12-25 08:58

I have been trying to use a QML TableView to display a QAbstractTableModel. The missing part of the equation seems to be that it is not possible to

2条回答
  •  既然无缘
    2020-12-25 09:09

    You could create dynamically as many TableViewColumn as you need, using the resources property of your TableView.

    You will have to add a method in your custom model class which will give you the roleNames you want to display.

    QML:

    Component
    {
        id: columnComponent
        TableViewColumn{width: 100 }
    }
    
    TableView {
        id: view
        anchors.fill: parent
        resources:
        {
            var roleList = myModel.customRoleNames
            var temp = []
            for(var i=0; i

    MyModel.h:

    class MyModel: public QAbstractListModel
    {
        Q_OBJECT
        Q_PROPERTY(QStringList userRoleNames READ userRoleNames CONSTANT)
    
    public:
        explicit MyModel(QObject *parent = 0);
    
        enum MyModelRoles {
            UserRole1 = Qt::UserRole + 1,
            UserRole2,
            ...
        };
    
        QStringList userRoleNames();
        int rowCount(const QModelIndex & parent = QModelIndex()) const;
        QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
        ...
    
    private:
        QHash roleNames() const;
        ...
    
    };
    

    MyModel.cpp:

    ...
    ...
    
    QHash MyModel::roleNames() const {
        QHash roles = QAbstractListModel::roleNames ();
        roles[UserRole1] = "whatever";
        roles[UserRole2] = "youwant";
        return roles;
    }
    
    QStringList MyModel::userRoleNames() // Return ordered List of user-defined roles
    {
        QMap res;
        QHashIterator i(roleNames());
        while (i.hasNext()) {
            i.next();
            if(i.key() > Qt::UserRole)
                res[i.key()] = i.value();
        }
        return res.values();
    }
    
    ...
    ...
    

提交回复
热议问题