qt 学习-------使用tableView,自定义model

代码参考
.h文件
下面的虚函数必须重写

#ifndef IMAGE_DATA_MODEL_H
#define IMAGE_DATA_MODEL_H

#include <QAbstractTableModel>
#include <QStyledItemDelegate>

namespace uni {
namespace core {
struct _image_info;
}
}

namespace faultui {
typedef struct uni::core::_image_info ImageInfo;
class image_data_model : public QAbstractTableModel
{
public:
    enum ColumnType {
        COL_IMAGE_ID = 0,
        COL_IMAGE_STATUS = 1,
        COL_IMAGE_CON_NUM = 2,
        COL_IMAGE_SIZE = 3,
        COL_IMAGE_END,
    };
    typedef QMap<QString, QSharedPointer<ImageInfo>> data_type;
    explicit image_data_model(QObject *parent = nullptr);

    virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const;
    virtual int rowCount(const QModelIndex & parent = QModelIndex()) const;
    virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
    virtual QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
    virtual QModelIndex	index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const ;
    virtual QModelIndex	parent (const QModelIndex &) const ;

    void load_from_image_data(const QMap<QString, QSharedPointer<ImageInfo>> &image_data);

private:
    QStringList list_header_;
    data_type image_data_;

};


}//faultui
#endif // IMAGE_DATA_MODEL_H

cpp文件

#include "image_data_model.h"

#include "common_model_struct.h"

namespace faultui {


image_data_model::image_data_model(QObject *parent)
    : QAbstractTableModel{parent}
{
    image_data_.clear();
}

QVariant image_data_model::headerData(int section, Qt::Orientation orientation, int role) const
{
    if(list_header_.isEmpty()) {
        static const char *table_header[] = {
             "镜像id" ,"运行状态","内部容器数量","大小(GB)"
        };
        if (orientation == Qt::Horizontal && role == Qt::DisplayRole && section >= 0 && section<sizeof(table_header) / sizeof(table_header[0]))
        {
            return QString(table_header[section]);
        }
    }else
    {
        if (orientation == Qt::Horizontal && role == Qt::DisplayRole && section >= 0 && section<list_header_.size())
        {
            return list_header_[section];
        }
    }
    return QVariant();
}

int image_data_model::rowCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent)
    return image_data_.size();
}

int image_data_model::columnCount(const QModelIndex &parent) const
{
    Q_UNUSED(parent)
    return COL_IMAGE_END;
}

QVariant image_data_model::data(const QModelIndex &index, int role) const
{
    if (!index.isValid()) {
        return QVariant();
    }

    int row = index.row();
    int column = index.column();
    if(Qt::TextAlignmentRole == role && column == COL_IMAGE_ID)
    {
        return int(Qt::AlignLeft | Qt::AlignVCenter);
    }

    if (Qt::TextAlignmentRole == role)
    {
        return Qt::AlignCenter;
    }

    if (role == Qt::DisplayRole || role == Qt::ToolTipRole)
    {
        if (row >= 0 && row<image_data_.count())
        {
            QSharedPointer<ImageInfo> p_image_info = image_data_.values().at(row);
            if(!p_image_info.isNull()){
                switch (column)
                {
                case COL_IMAGE_ID: {
                    return p_image_info->str_image_id;
                }
                case COL_IMAGE_STATUS: {
                    return p_image_info->str_image_status;
                }
                case COL_IMAGE_CON_NUM: {
                    return p_image_info->str_image_con_num;
                }
                case COL_IMAGE_SIZE: {
                    return p_image_info->str_image_size;
                }
                default: {
                    break;
                }
                }
            }
        }
    }
    return QVariant();
}

QModelIndex image_data_model::index(int row, int column, const QModelIndex &parent) const
{
    Q_UNUSED(parent)
    return createIndex(row, column);
}

QModelIndex image_data_model::parent(const QModelIndex &) const
{
    return QModelIndex();
}

void image_data_model::load_from_image_data(const QMap<QString, QSharedPointer<ImageInfo> > &image_data)
{
    image_data_ = image_data;
    beginResetModel();
    endResetModel();
}

}//faultui

common_model_struct.h

#ifndef COMMON_MODEL_STRUCT_H
#define COMMON_MODEL_STRUCT_H

#include <QtCore>
//
namespace uni {
namespace core {

struct _image_info
{
    QString str_image_id;//镜像id
    QString str_image_status;//运行状态
    QString str_image_con_num;//内部容器数量
    QString str_image_size;//大小(GB)
};

struct _container_info
{
    QString str_con_id;//容器id
    QString str_con_name;//容器名称
    QString str_con_status;//运行状态
    QString str_con_xserver;//xserver状态
};




}//uni
}//core

#endif // COMMON_MODEL_STRUCT_H
  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值