#include "graphitem.h"
#include<QPainter>
GraphItem::GraphItem(QGraphicsItem *parent) : QGraphicsObject(parent)
{
m_image=new QImage(m_width*3,m_height,QImage::Format_ARGB32);
m_image->fill(Qt::black);
rectF=QRectF(0,0,m_width+1,m_height);
QPainter p(m_image);
QPen pen(Qt::white);
pen.setWidthF(0.5);
p.setPen(pen);
QPointF startPos(5,15);
for(int i=0;i<120;i++)
{
QPointF pos=startPos+QPointF(12*i,10);
if(i%5==0)
{
p.drawLine(pos,pos+QPointF(0,10));
QRectF rect(0,0,40,15);
rect.moveCenter(startPos+QPointF(12*i,0));
p.drawText(rect,Qt::AlignCenter,QString("%1").arg(3*i,1,'f',0));
}
else
{
p.drawLine(pos+QPointF(0,5),pos+QPointF(0,10));
}
}
p.drawLine(0,35,m_width*3-1,35);
moveRight(5);
moveLeft(m_width/2);
m_num=0;
img=m_image->copy();
}
void GraphItem::setValue(double value)
{
const uchar* bits_img=img.bits();
uchar* bits_image=m_image->bits();
memcpy(bits_image,bits_img,img.byteCount());
// int num=(value)*4-m_num;
// if(num>0)
// {
// moveRight(qAbs(num));
// }
// else {
// moveLeft(qAbs(num));
// }
// m_num+=num;
moveRight(value*4);
update();
}
void GraphItem::moveRight(int num)
{
int image_width=m_image->width();
int image_height=m_image->height();
for(int i=0;i<image_height;i++)
{
QRgb* buff=(QRgb*)m_image->scanLine(i);
QRgb temp[num];
memmove(temp,buff,num*sizeof(QRgb));//
memmove(buff,buff+num,(image_width-num)*sizeof(QRgb));
memmove(buff+image_width-num-1,temp,(num)*sizeof(QRgb));
}
}
void GraphItem::moveLeft(int num)
{
int image_width=m_image->width();
int image_height=m_image->height();
for(int i=0;i<image_height;i++)
{
QRgb* buff=(QRgb*)m_image->scanLine(i);
QRgb temp[num];
memmove(temp,buff+image_width-num-1,num*sizeof(QRgb));//
memmove(buff+num,buff,(image_width-num)*sizeof(QRgb));
memmove(buff,temp,(num)*sizeof(QRgb));
}
}
void GraphItem::slt_update()
{
}
QRectF GraphItem::boundingRect() const
{
QRectF rectF=QRectF(0,0,m_width+1,m_height);
rectF.moveCenter(QPointF(0,0));
return rectF;
}
void GraphItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QPixmap pixmap=QPixmap::fromImage(*m_image);
painter->drawPixmap(boundingRect(),pixmap,rectF);
// QRectF rect(0,0,60,25);
// rect.moveCenter(QPointF(0,-10));
// painter->setBrush(QColor(255,0,0,255));
// painter->drawRect(rect);
// painter->drawText(rect,Qt::AlignCenter,QString::number(m_value,'f',2));
QPolygonF polygon;
polygon<<QPointF(0.5,10)<<QPointF(-4.5,23)<<QPointF(5.5,23);
painter->setBrush(QColor(0,0,255,255));
painter->setPen(Qt::NoPen);
painter->drawPolygon(polygon);
}
没有合适的资源?快使用搜索试试~ 我知道了~
实现刻度循环移动,环形循环显示
共26个文件
h:7个
cpp:7个
debug:2个
需积分: 3 1 下载量 142 浏览量
2024-09-08
22:11:56
上传
评论
收藏 24KB RAR 举报
温馨提示
在需要刻度循环移动场景下可以使用该原理,用图片中像素数据循环移动的方法,实现了图形内容的循环移动,环形循环显示
资源推荐
资源详情
资源评论
收起资源包目录
drawImage.rar (26个子文件)
widget.ui 865B
graphitem.cpp 3KB
ui_widget.h 1KB
graphitem.h 739B
widget.cpp 1KB
qrc.qrc 139B
trianglerotateitem.cpp 1KB
image
scale.svg 3KB
pointer.svg 849B
Makefile 28KB
main.cpp 175B
release
triangleitem.h 888B
drawImage.pro.user 23KB
Makefile.Release 105KB
trianglerotateitem.h 764B
imageitem.cpp 630B
Makefile.Debug 104KB
triangleitem.cpp 1KB
.qmake.stash 1023B
object_script.drawImage.Debug 337B
diaitem.h 478B
diaitem.cpp 993B
object_script.drawImage.Release 365B
drawImage.pro 1KB
imageitem.h 503B
widget.h 568B
共 26 条
- 1
资源评论
蔡云辉
- 粉丝: 164
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Unity读取Json文件的插件
- JAVA源码Java五线谱处理类库abc4j
- MySQL“基于 ASP.NET 的城乡农产品供应系统的设计”数据库设计
- JAVA源码Java网页爬虫JSpider
- JAVA源码Java调用本地库JNAerator
- Wallystech IPQ5332 cpu WiFi7 DR5332 indoor AP
- Prometheus+Grafana 监控Kube-CoreDNS模版
- 鱼类珊瑚鱼带动画模型:Schooling fish Blue and Yellow Tangs
- JAVA源码Java条形码生成库Barcode4J
- JAVA源码Java算术表达式计算类库ExpressionJ
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功