前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt-使用控件ListView

Qt-使用控件ListView

作者头像
kdyonly
发布2023-03-03 19:40:46
8850
发布2023-03-03 19:40:46
举报
文章被收录于专栏:个人编程笔记个人编程笔记

浏览量 1

如何对ListView进行数据添加,只需要设置ListView的Model即可。 1.创建一个需要展示的数据的类

代码语言:javascript
复制
//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

代码语言:javascript
复制
//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用来显示数据。

代码语言:javascript
复制
//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。

代码语言:javascript
复制
//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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档