如何对ListView进行数据添加,只需要设置ListView的Model即可。
1.创建一个需要展示的数据的类
//tooltagsmodel.h
class ToolTag{
public:
ToolTag(const QString& tagCode, const QString& tagName):mTagCode(tagCode),mTagName(tagName)
{
}
QString TagCode() const { return this->mTagCode; }
QString TagName() const { return this->mTagName; }
QVariant obj;//当前model的组件对象
private:
QString mTagCode;
QString mTagName;
};
2.创建数据展示的Model,继承于QAbstractListModel
//tooltagsmodel.h
class ToolTagModel :public QAbstractListModel
{
Q_OBJECT
public:
ToolTagModel(QObject* parent=NULL);
~ToolTagModel() {}
//外部接口 C++调用 添加数据
void Add(ToolTag& tt);
//外部接口 清除model
Q_INVOKABLE void clear();
//虚函数 qml内部调用 获取第index行的内容 role 内容索引
QVariant data(const QModelIndex &index, int role =Qt::DisplayRole) const;
//虚函数 获取model行数
int rowCount(const QModelIndex &parent = QModelIndex() ) const;
// 虚函数 内容的别名 qml 内部调用
//QHash<int, QByteArray> roleNames() const;
//自定义 设置当前model第index行的当前组件指针
Q_INVOKABLE void setcuritem(int index , QVariant j)
{
m_datas[index].obj = j;
}
void InitData();
private:
//model数据集合
std::vector<ToolTag> m_datas;
};
3.实现头文件中定义的几个方法,Add
用于向Model里头添加数据,data
用来显示数据。
//tooltagsmodel.cpp
#include "tooltagsmodel.h"
ToolTagModel::ToolTagModel(QObject* parent) :QAbstractListModel(parent)
{
}
void ToolTagModel::Add(ToolTag& tt)
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_datas.push_back(tt);
endInsertRows();
}
void ToolTagModel::clear()
{
//清除rows 界面将不显示
beginRemoveRows(QModelIndex(), 0, m_datas.size());
//清空动态数组
m_datas.clear();
endRemoveRows();
}
int ToolTagModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return m_datas.size();
}
QVariant ToolTagModel::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() >= m_datas.size())
{
return QVariant();
}
int nRow=index.row();
int nCol=index.column();
const ToolTag& d = m_datas[index.row()];
switch(role){
case Qt::DisplayRole:
switch (nCol) {
case 0:
return m_datas[nRow].TagName();
break;
case 1:
return m_datas[nRow].TagCode();
break;
}
break;
}
return QVariant();
}
//初始化数据
void ToolTagModel::InitData(){
ToolTag toolTagEfficiency("EfficiencyTools", "效率工具");
ToolTag toolTagMore("More", "发现");
m_datas.push_back(toolTagEfficiency);
m_datas.push_back(toolTagMore);
}
4.设置Listview的Model。
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ToolTagModel * toolTagModel = new ToolTagModel();
toolTagModel->InitData();
//ToolTags就是ListView的名字
ui->ToolTags->setModel(toolTagModel);
ui->ToolTags->selectionBehavior()
}
MainWindow::~MainWindow()
{
delete ui;
}