PlotterHMI/datafile/view/mygraphicsitem.cpp

109 lines
3.0 KiB
C++
Raw Permalink Normal View History

2024-02-06 06:19:53 +00:00
#include "mygraphicsitem.h"
MyGraphicsItem::MyGraphicsItem()
{
m_point.setX(0);
m_point.setY(0);
//使item可以被选择
//this->setFlag(QGraphicsItem::ItemIsSelectable);
//使item可以移动
//this->setFlag(QGraphicsItem::ItemIsMovable);
//item可以响应鼠标事件
//this->setAcceptHoverEvents(true);
}
MyGraphicsItem::~MyGraphicsItem()
{
}
void MyGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
return QGraphicsItem::mousePressEvent(event);
}
void MyGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
return QGraphicsItem::mouseMoveEvent(event);
}
void MyGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
return QGraphicsItem::mouseReleaseEvent(event);
}
2024-03-22 07:58:53 +00:00
CreatPictureStr MyGraphicsItem::getPictureByDat(Marker marker,int paperWidth,int butSpace,int rightSpace,int penWidth)
2024-02-06 06:19:53 +00:00
{
2024-03-22 07:58:53 +00:00
m_pictureStr = creatPictureByData(marker,paperWidth,butSpace,rightSpace,penWidth);
m_boundingRect = m_pictureStr.showPic.boundingRect();
return m_pictureStr;
}
2024-03-22 07:58:53 +00:00
CreatPictureStr MyGraphicsItem::getPictureByBmp(QPixmap pixmap,int paperWidth,int butSpace,int rightSpace,int penWidth)
{
2024-03-22 07:58:53 +00:00
m_pictureStr = creatPictureByBmp(pixmap,paperWidth,butSpace,rightSpace,penWidth);
m_boundingRect = m_pictureStr.showPic.boundingRect();
return m_pictureStr;
}
2024-02-06 06:19:53 +00:00
void MyGraphicsItem::setPicture(QPicture pic)
{
2024-03-22 07:58:53 +00:00
m_pictureStr.showPic = pic;
2024-02-06 06:19:53 +00:00
// 外矩形
2024-03-22 07:58:53 +00:00
m_boundingRect = m_pictureStr.showPic.boundingRect();
update();
}
2024-02-06 06:19:53 +00:00
void MyGraphicsItem::reflushBlockPos(QPoint p)
{
m_point = p;
2024-03-22 07:58:53 +00:00
m_blockPixmap = QPixmap(PIXMAPWIDTH,m_pictureStr.showPic.height());
2024-02-06 06:19:53 +00:00
m_blockPixmap.fill(Qt::transparent);//透明色
if(m_point.x() >= 0 && m_point.y() >= 0)
{
QPainter painter(&m_blockPixmap);
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.fillRect(m_blockPixmap.rect(), QColor(0, 0, 0, 80));
painter.end();
}
update();
}
QRectF MyGraphicsItem::boundingRect() const
{
return m_boundingRect;
}
void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
QPen pen;
QBrush brush;
brush.setStyle(Qt::SolidPattern);
pen.setWidth(1);
// 获取当前的变换矩阵
QTransform transform = painter->worldTransform();
double scaleFactor = std::sqrt(transform.m11() * transform.m11() +
transform.m22() * transform.m22());
2024-02-06 06:19:53 +00:00
double width = pen.width()/scaleFactor;
pen.setWidthF(width); // 线段保持原来的线宽
pen.setColor(QColor(Qt::black));
brush.setColor(QColor(255,255,255));
painter->setPen(pen);
painter->setBrush(brush);
//防锯齿,效果不好,所以注释掉
// painter->setRenderHint(QPainter::Antialiasing, true);
// painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
2024-03-22 07:58:53 +00:00
painter->drawPicture(0,0,m_pictureStr.showPic);
painter->drawPixmap(m_point.x(),m_point.y(),m_blockPixmap);
2024-03-22 07:58:53 +00:00
//painter->end();
2024-02-06 06:19:53 +00:00
}