代码参考
.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