qt listview显示QList<int>数据
时间: 2023-12-17 16:03:23 浏览: 170
要在Qt的ListView中显示QList<int>数据,需要使用QAbstractListModel作为数据模型并重写rowCount、data和roleNames函数。
以下是一个简单的例子:
```cpp
class IntListModel : public QAbstractListModel
{
Q_OBJECT
public:
IntListModel(QObject *parent = nullptr) : QAbstractListModel(parent) {}
int rowCount(const QModelIndex &parent = QModelIndex()) const override
{
return m_data.count();
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (!index.isValid() || index.row() >= m_data.count())
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole)
return m_data.at(index.row());
return QVariant();
}
QHash<int, QByteArray> roleNames() const override
{
QHash<int, QByteArray> roles;
roles[Qt::DisplayRole] = "data";
roles[Qt::EditRole] = "data";
return roles;
}
void setData(const QList<int> &data)
{
beginResetModel();
m_data = data;
endResetModel();
}
private:
QList<int> m_data;
};
```
在这个例子中,我们定义了一个IntListModel,继承自QAbstractListModel。rowCount函数返回数据列表中的元素数量,data函数返回指定索引的元素值,roleNames函数定义了数据模型中的角色名。setData函数用于设置数据列表。
在界面代码中,我们可以将IntListModel设置为ListView的model,并将数据列表通过setData函数传递给IntListModel:
```cpp
QList<int> data = {1, 2, 3, 4, 5};
IntListModel *model = new IntListModel(this);
model->setData(data);
ListView {
model: model
delegate: Text {
text: model.data
}
}
```
在这个例子中,我们创建了一个QList<int>类型的数据列表,实例化了IntListModel,并通过setData函数将数据传递给IntListModel。然后将IntListModel设置为ListView的model,并将每个元素用Text组件显示出来。
阅读全文
相关推荐


















