代码拉取完成,页面将自动刷新
#include "itemdelegate.h"
#include <QPainter>
#include <QStyledItemDelegate>
#include <QStyle>
#include <QEvent>
#include <QDebug>
#include "itemdef.h"
ItemDelegate::ItemDelegate(QObject *parent) :
QStyledItemDelegate(parent)
{
}
ItemDelegate::~ItemDelegate()
{
}
void ItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(index.isValid())
{
painter->save();
ItemStatus status = (ItemStatus)(index.data(Qt::UserRole).toInt());
QVariant variant = index.data(Qt::UserRole+1);
ItemData data = variant.value<ItemData>();
QStyleOptionViewItem viewOption(option);//用来在视图中画一个item
QRectF rect;
rect.setX(option.rect.x());
rect.setY(option.rect.y());
rect.setWidth( option.rect.width()-1);
rect.setHeight(option.rect.height()-1);
//QPainterPath画圆角矩形
const qreal radius = 7;
QPainterPath path;
path.moveTo(rect.topRight() - QPointF(radius, 0));
path.lineTo(rect.topLeft() + QPointF(radius, 0));
path.quadTo(rect.topLeft(), rect.topLeft() + QPointF(0, radius));
path.lineTo(rect.bottomLeft() + QPointF(0, -radius));
path.quadTo(rect.bottomLeft(), rect.bottomLeft() + QPointF(radius, 0));
path.lineTo(rect.bottomRight() - QPointF(radius, 0));
path.quadTo(rect.bottomRight(), rect.bottomRight() + QPointF(0, -radius));
path.lineTo(rect.topRight() + QPointF(0, radius));
path.quadTo(rect.topRight(), rect.topRight() + QPointF(-radius, -0));
if(option.state.testFlag(QStyle::State_Selected))
{
painter->setPen(QPen(Qt::blue));
painter->setBrush(QColor(229, 241, 255));
painter->drawPath(path);
// int row_index = index.row();
// emit(signal_itemSelected(row_index));
}
else if(option.state.testFlag(QStyle::State_MouseOver))
{
painter->setPen(QPen(Qt::green));
painter->setBrush(Qt::NoBrush);
painter->drawPath(path);
}
else{
painter->setPen(QPen(Qt::gray));
painter->setBrush(Qt::NoBrush);
painter->drawPath(path);
}
//绘制数据位置
QRect NameRect = QRect(rect.left() +10, rect.top()+10, rect.width()-30, 20);
QRect circle = QRect(NameRect.right(), rect.top()+15, 15, 15);
QRect telRect = QRect(rect.left() +10, rect.bottom()-25, rect.width()-10, 20);
switch (status) {
case S_RED:
painter->setBrush(Qt::red);
painter->setPen(QPen(Qt::red));
break;
case S_BLUE:
painter->setBrush(Qt::blue);
painter->setPen(QPen(Qt::blue));
break;
case S_YELLOW:
painter->setBrush(Qt::yellow);
painter->setPen(QPen(Qt::yellow));
break;
case S_GREEN:
painter->setBrush(Qt::green);
painter->setPen(QPen(Qt::green));
break;
case S_GRAY:
painter->setBrush(Qt::gray);
painter->setPen(QPen(Qt::gray));
break;
}
painter->drawEllipse(circle); //画圆圈
painter->setPen(QPen(Qt::black));
painter->setFont(QFont("Times", 12, QFont::Bold));
painter->drawText(NameRect,Qt::AlignLeft,data.name);
painter->setPen(QPen(Qt::gray));
painter->setFont(QFont("Times", 10));
painter->drawText(telRect,Qt::AlignLeft,data.data);
painter->restore();
}
}
QSize ItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
return QSize(160, 60);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。