16,240
社区成员
发帖
与我相关
我的任务
分享
#ifndef QMYTABLEMODEL_H
#define QMYTABLEMODEL_H
#include <QAbstractTableModel>
#include <QList>
#include <QHash>
#define Col_Count 10
typedef QHash<int,QVariant> Hash_DataRole;
typedef QList<Hash_DataRole> List_Cols ;
typedef QList<List_Cols> List_Rows ;
class QMyTableModel : public QAbstractTableModel
{
public:
explicit QMyTableModel(QObject *parent = 0);
int setDataSrc(const List_Rows &src,int row, int col);
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
Qt::ItemFlags flags(const QModelIndex &index = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const;
private:
/** 行 列 Qt::ItemDataRole */
List_Rows m_listData;
int m_iRow;
int m_iCol;
};
#endif // QMYTABLEMODEL_H
#include "QMyTableModel.h"
QMyTableModel::QMyTableModel(QObject *parent)
: QAbstractTableModel(parent)
{
m_listData.clear();
m_iRow = 0;
m_iCol = 0;
}
int QMyTableModel::setDataSrc(const List_Rows &src, int row, int col)
{
if(row < 0 || col < 0)
return -1;
m_listData = src;
m_iRow = row;
m_iCol = col;
beginResetModel();
endResetModel();
return m_listData.size();
}
int QMyTableModel::rowCount(const QModelIndex &parent) const
{
return parent.isValid() ? 0 : m_iRow;
}
int QMyTableModel::columnCount(const QModelIndex &parent) const
{
return parent.isValid() ? 0 : m_iCol;
}
Qt::ItemFlags QMyTableModel::flags(const QModelIndex &index) const
{
Qt::ItemFlags flags = QAbstractTableModel::flags(index);
if(index.isValid())
flags |= (Qt::ItemIsSelectable | Qt::ItemIsEnabled/* | Qt::ItemIsEditable*/);
return flags;
}
QVariant QMyTableModel::data(const QModelIndex &index, int role) const
{
int row = index.row();
int col = index.column();
if(!index.isValid()
|| row < 0 || col < 0 || row > m_iRow-1 || col > m_iCol-1)
return QVariant();
if(row > m_listData.size()-1)
return QVariant();
List_Cols listCols = m_listData.at(row);
if(col > listCols.size()-1)
return QVariant();
Hash_DataRole hashDataRole = listCols.at(col);
if(hashDataRole.contains(role))
return hashDataRole.value(role);
return QVariant();
}
m_pModel = new QMyTableModel(this);
ui->tableView->setModel(m_pModel);
int row = ui->row->text().toInt();
int col = ui->col->text().toInt();
List_Rows listRows;
for(int i = 0 ; i < row ; ++i)
{
List_Cols listCols;
for(int j = 0; j < col; ++j)
{
Hash_DataRole hashDataRole;
hashDataRole.insert((int)Qt::DisplayRole,QString("%1-%2").arg(i).arg(j));
listCols.push_back(hashDataRole);
}
listRows.push_back(listCols);
}
QTime time;
time.start();
m_pModel->setDataSrc(listRows,row,col);
ui->elapsed->setText(QString("%1 ms").arg(time.elapsed()));