1 Star 1 Fork 1

吴堉民/PCBATestTool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
itemdelegate.cpp 3.68 KB
一键复制 编辑 原始数据 按行查看 历史
吴堉民 提交于 2021-01-08 14:01 +08:00 . modify detecting method
#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);
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wu_yumin/pcbatest-tool.git
git@gitee.com:wu_yumin/pcbatest-tool.git
wu_yumin
pcbatest-tool
PCBATestTool
master

搜索帮助