qml中的QAbstractTableModel子类表示



>我创建了QAbstractTableModel子类,表示它就像Qml中的表。在 qml 中,我使用 GridView 或 ListView 项时,它们仅使用第一列来表示。根据文档:http://doc.qt.io/qt-5/qml-qtquick-gridview.html 此类使用QAbstractListModel。是否有任何类可以纠正 qml 中的表示 QAbstractTableModel,例如网格?

我的模型有.h文件(下面的所有功能都是用C++实现的(

class ButtonModel : public QAbstractTableModel
{
    Q_OBJECT
public:
    enum ButtonRoles {
        BUTTON_ID_ROLE = Qt::UserRole + 1,
    };
    enum ColumnNames{
        FIRST = 0,
        SECOND,
        THIRD,
        FOURTH,
        FIFTH,
        SIXTH,
        SEVENTH,
        LAST
    };
    ButtonModel(QObject* parent = 0);
    int rowCount(const QModelIndex &parent = QModelIndex()) const;
    int columnCount(const QModelIndex &parent = QModelIndex()) const;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
    bool loadModel (const QVector<QHash<ColumnNames, Button *>> &buttons, const QModelIndex &parent = QModelIndex());
private:
    QVector<QHash<ColumnNames, Button*>> _buttons;
};

和 data(( 函数实现

QVariant ButtonModel::data(const QModelIndex &index, int role) const
{
    if ((!index.isValid()) || (this->rowCount() <= index.row()) || (this->columnCount() <= index.column())){
        return QVariant();
    }
    switch (role){
        case ButtonRoles::BUTTON_ID_ROLE:
            return QVariant(_buttons[index.row()][ColumnNames(index.column())]->buttonId());
            break;
        case Qt::DisplayRole:
            return QVariant(_buttons[index.row()][ColumnNames(index.column())]->displayText());
            break;
        default:
            return QVariant();
    }
}

你可能想要一个QTableView而不是QGridView。

网格视图实际上只是列表的不同布局,而表视图确实具有多个列,并且可以从C++ QAbstractTableModel 获取其模型数据。

表视图 QML 类型 |Qt速控 5.9

相关内容

  • 没有找到相关文章

最新更新