279 lines
8.5 KiB
C++
279 lines
8.5 KiB
C++
|
#include "PartsInventoryModelDelegate.h"
|
|||
|
#include <QPainter>
|
|||
|
#include <QDebug>
|
|||
|
|
|||
|
PartsInventoryModelItem::PartsInventoryModelItem()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
PartsInventoryModelItem::~PartsInventoryModelItem()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
PartsInventoryTableModel::PartsInventoryTableModel(QObject* parent)
|
|||
|
:QAbstractTableModel (parent)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
PartsInventoryTableModel::~PartsInventoryTableModel()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
#if 0
|
|||
|
Qt::ItemFlags PartsInventoryTableModel::flags(const QModelIndex &index) const
|
|||
|
{
|
|||
|
if(index.column() != 0)
|
|||
|
return Qt::ItemIsEditable | Qt::ItemIsSelectable | QAbstractTableModel::flags(index);
|
|||
|
return QAbstractTableModel::flags(index);
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
int PartsInventoryTableModel::rowCount(const QModelIndex &parent) const
|
|||
|
{
|
|||
|
if(parent.isValid())
|
|||
|
return 0;
|
|||
|
return Ary_row_List.size();
|
|||
|
}
|
|||
|
int PartsInventoryTableModel::columnCount(const QModelIndex &parent) const
|
|||
|
{
|
|||
|
if(parent.isValid())
|
|||
|
return 0;
|
|||
|
return 10;
|
|||
|
}
|
|||
|
QVariant PartsInventoryTableModel::data(const QModelIndex &index, int role) const
|
|||
|
{
|
|||
|
if(Ary_row_List.size() < 1 || !index.isValid())
|
|||
|
return QVariant();
|
|||
|
if (role == Qt::TextAlignmentRole)
|
|||
|
{
|
|||
|
return int (Qt::AlignHCenter | Qt::AlignVCenter);
|
|||
|
}
|
|||
|
if(role == Qt::DisplayRole || role == Qt::EditRole)
|
|||
|
{
|
|||
|
if(index.column() == 0)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetId();
|
|||
|
}
|
|||
|
else if(index.column() == 1)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetNumNo();
|
|||
|
}
|
|||
|
else if(index.column() == 2)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetName();
|
|||
|
}
|
|||
|
else if(index.column() == 3)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetSpecification();
|
|||
|
}
|
|||
|
else if(index.column() == 4)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetMaterial();
|
|||
|
}
|
|||
|
else if(index.column() == 5)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetSize();
|
|||
|
}
|
|||
|
else if(index.column() == 6)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetRepositories();
|
|||
|
}
|
|||
|
else if(index.column() == 7)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetRemainder();
|
|||
|
}
|
|||
|
else if(index.column() == 8)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetPercentage();
|
|||
|
}
|
|||
|
else if(index.column() == 9)
|
|||
|
{
|
|||
|
return Ary_row_List.at(index.row()).GetList();
|
|||
|
}
|
|||
|
}
|
|||
|
return QVariant();
|
|||
|
}
|
|||
|
QVariant PartsInventoryTableModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|||
|
{
|
|||
|
if(role == Qt::DisplayRole || role == Qt::EditRole)
|
|||
|
{
|
|||
|
if(orientation == Qt::Horizontal)
|
|||
|
{
|
|||
|
if(horizontal_header_list.size() > section)
|
|||
|
return horizontal_header_list[section];
|
|||
|
else
|
|||
|
return QVariant();
|
|||
|
}
|
|||
|
if(orientation == Qt::Vertical)
|
|||
|
{
|
|||
|
if(vertical_header_list.size() > section)
|
|||
|
return vertical_header_list[section];
|
|||
|
else
|
|||
|
return QVariant();
|
|||
|
}
|
|||
|
}
|
|||
|
return QAbstractTableModel::headerData(section, orientation, role);
|
|||
|
}
|
|||
|
|
|||
|
void PartsInventoryTableModel::setHorizontalHeaderList(QStringList hHeadList)
|
|||
|
{
|
|||
|
horizontal_header_list = hHeadList;
|
|||
|
}
|
|||
|
|
|||
|
void PartsInventoryTableModel::setVerticalHeaderList(QStringList VHeadList)
|
|||
|
{
|
|||
|
vertical_header_list = VHeadList;
|
|||
|
}
|
|||
|
|
|||
|
void PartsInventoryTableModel::RefrushModel(PartsInventoryModelItem item)
|
|||
|
{
|
|||
|
const int count = Ary_row_List.size();
|
|||
|
beginInsertRows(QModelIndex(), count, count);
|
|||
|
Ary_row_List.push_back(item);
|
|||
|
endInsertRows();
|
|||
|
}
|
|||
|
|
|||
|
bool PartsInventoryTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
|
|||
|
{
|
|||
|
Q_UNUSED(value);
|
|||
|
if(Ary_row_List.size() < 1 || !index.isValid())
|
|||
|
return false;
|
|||
|
if (role == Qt::TextAlignmentRole)
|
|||
|
{
|
|||
|
return int (Qt::AlignHCenter | Qt::AlignVCenter);
|
|||
|
}
|
|||
|
if(role == Qt::DisplayRole || role == Qt::EditRole)
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
void PartsInventoryTableModel::PushBackData(QList<QStringList> list,QList<QVariantList> valueList)
|
|||
|
{
|
|||
|
if(list.size() <= 0 || valueList.size() <= 0)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
if(list.at(0).size() < 9)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
if(list.size() != valueList.size())
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
for(int i = 0; i < list.size(); i++)
|
|||
|
{
|
|||
|
PartsInventoryModelItem Item;
|
|||
|
const QString null = "";
|
|||
|
Item.SetId(list.at(i).at(0).isEmpty() ? null : list.at(i).at(0));
|
|||
|
Item.SetNumNo(list.at(i).at(1).isEmpty() ? null : list.at(i).at(1));
|
|||
|
Item.SetName(list.at(i).at(2).isEmpty() ? null : list.at(i).at(2));
|
|||
|
Item.SetSpecification(list.at(i).at(3).isEmpty() ? null : list.at(i).at(3));
|
|||
|
Item.SetMaterial(list.at(i).at(4).isEmpty() ? null : list.at(i).at(4));
|
|||
|
Item.SetSize(list.at(i).at(5).isEmpty() ? null : list.at(i).at(5));
|
|||
|
Item.SetRepositories(list.at(i).at(6).isEmpty() ? null : list.at(i).at(6));
|
|||
|
Item.SetRemainder(list.at(i).at(7).isEmpty() ? null : list.at(i).at(7));
|
|||
|
Item.SetPercentage(list.at(i).at(8).isEmpty() ? null : list.at(i).at(8));
|
|||
|
Item.SetList(valueList.at(i));
|
|||
|
Ary_row_List.push_back(Item);
|
|||
|
}
|
|||
|
|
|||
|
RefrushModelData();
|
|||
|
}
|
|||
|
|
|||
|
//void PartsInventoryTableModel::PopBackData()
|
|||
|
//{
|
|||
|
// for(int i = 0; i < Ary_row_List.size(); i++)
|
|||
|
// {
|
|||
|
// Ary_row_List.removeAt(0);
|
|||
|
// }
|
|||
|
// Ary_row_List.clear();
|
|||
|
// RefrushModelData();
|
|||
|
//}
|
|||
|
|
|||
|
void PartsInventoryTableModel::RefrushModelData()
|
|||
|
{
|
|||
|
this->beginResetModel();
|
|||
|
|
|||
|
this->endResetModel();
|
|||
|
}
|
|||
|
|
|||
|
PartsInventoryModelDelegate::PartsInventoryModelDelegate(QObject *parent)
|
|||
|
:QItemDelegate (parent)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
PartsInventoryModelDelegate::~PartsInventoryModelDelegate()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void PartsInventoryModelDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
|||
|
{
|
|||
|
if(index.column() == 0 || index.column() == 1 || index.column() == 2 || index.column() == 3 || index.column() == 4
|
|||
|
|| index.column() == 5 || index.column() == 6 || index.column() == 7 || index.column() == 8)
|
|||
|
{
|
|||
|
painter->setPen(QPen(QColor(255,255,255)));
|
|||
|
QString mos = index.model()->data(index,Qt::DisplayRole).toString();
|
|||
|
QTextOption o;
|
|||
|
o.setAlignment(Qt::AlignCenter);
|
|||
|
painter->drawText(option.rect,mos,o);
|
|||
|
}
|
|||
|
if(index.column() == 9)
|
|||
|
{
|
|||
|
painter->save();
|
|||
|
painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
|
|||
|
QVariantList valueList = index.model()->data(index,Qt::DisplayRole).toList();
|
|||
|
int radius = option.rect.height() / 2;
|
|||
|
|
|||
|
// QFont font;
|
|||
|
// font.setPixelSize(option.rect.height() * 0.9);
|
|||
|
// painter->setFont(font);
|
|||
|
const int value1 = valueList.at(0).toInt();
|
|||
|
const int value2 = valueList.at(1).toInt();
|
|||
|
const int sum = value1 + value2;
|
|||
|
const double percent1 = (double)value1 / (double)sum;
|
|||
|
const double percent2 = (double)value2 / (double)sum;
|
|||
|
const int width1 = option.rect.width() * percent1;
|
|||
|
const int width2 = option.rect.width() * percent2;
|
|||
|
const QString text1 = QString("%1%").arg(QString::number(percent1 * 100, 'f', 0));
|
|||
|
const QString text2 = QString("%1%").arg(QString::number(percent2 * 100, 'f', 0));
|
|||
|
|
|||
|
painter->setPen(Qt::NoPen);
|
|||
|
painter->setBrush(QColor(0,255,0));
|
|||
|
|
|||
|
//计算绘制的区域,需要裁剪圆角部分
|
|||
|
QPainterPath clipPath1;
|
|||
|
clipPath1.addRoundedRect(option.rect, radius, radius);
|
|||
|
painter->setClipPath(clipPath1);
|
|||
|
QRect rect1(option.rect.x(), option.rect.y(), width1,option.rect.height());
|
|||
|
painter->drawRect(rect1);
|
|||
|
painter->setPen(QColor(255,255,255));
|
|||
|
painter->drawText(rect1, Qt::AlignCenter, text1);
|
|||
|
|
|||
|
painter->setPen(Qt::NoPen);
|
|||
|
painter->setBrush(QColor(255,0,0));
|
|||
|
|
|||
|
QPainterPath clipPath2;
|
|||
|
clipPath2.addRoundedRect(option.rect, radius, radius);
|
|||
|
painter->setClipPath(clipPath2);
|
|||
|
QRect rect2(option.rect.x() + width1, option.rect.y(), width2,option.rect.height());
|
|||
|
painter->drawRect(rect2);
|
|||
|
painter->setPen(QColor(255,255,255));
|
|||
|
painter->drawText(rect2, Qt::AlignCenter, text2);
|
|||
|
painter->restore();
|
|||
|
}
|
|||
|
// else
|
|||
|
// {
|
|||
|
// QItemDelegate::paint(painter,option,index);
|
|||
|
// }
|
|||
|
}
|
|||
|
|