Qt-使用控件ListView

2021-11-24 386 0

如何对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;
}

相关文章

Qt-修改界面无效的可能情况
Qt-Windows下发布应用程序
Qt-改变tabBar位置并改变文字方向
Qt-自定义可编辑模型
Qt-自定义可编辑模型
Qt-网络编程

发布评论