>我创建了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