资源简介
使用qtcreator 绘制类似跑马灯的效果 换行圈,可以设置每个小车的颜色
代码片段和文件信息
#include “carwidget.h“
#include
#include
#include
CarWidget::CarWidget(QWidget *parent) : QWidget(parent)
{
m_iCar = 76;
m_iCarWidth = 0;
m_index = 0;
m_type = Left;
m_bgColor = QColor(686868);
m_carColor = QColor(20190150);
m_textColor = QColor(255255255);
m_iSize = 10;
}
CarWidget::~CarWidget()
{
}
void CarWidget::paintEvent(QPaintEvent *p)
{
QPainter painter(this);
//绘制背景色
painter.setBrush(m_bgColor);
painter.setPen(m_bgColor);
painter.drawRect(rect());
paintCar(painter);
return QWidget::paintEvent(p);
}
void CarWidget::resizeEvent(QResizeEvent *)
{
calc();
update();
}
void CarWidget::calc()
{
QRect rect = this->geometry();
//圆的直径
int iDiameter = rect.width() < rect.height() ? rect.width() : rect.height();
//上下留5个像素
m_iDiameter = iDiameter - 10;
m_iLeft = m_iDiameter * 3 / 100 > 0 ? m_iDiameter * 3 / 100 : 3;
m_iRight = width() - m_iDiameter + m_iLeft;
int iLength = 3.14 * m_iDiameter + 2 * ( width() - m_iDiameter );
//平均的距离
m_iCarWidth = iLength / ( m_iCar * 1.5 );
}
void CarWidget::paintCar(QPainter &painter)
{
//Y的高度
int iHeight = (height() - m_iDiameter) / 2 + m_iCarWidth;
painter.setRenderHint(QPainter::Antialiasing true);
painter.setPen(m_carColor);
QPainterPath path;
path.addEllipse(m_iCarWidth iHeight m_iDiameter - m_iCarWidth * 2 m_iDiameter - m_iCarWidth * 2);
QPainterPath pathRect;
pathRect.addRect(m_iDiameter / 2 + m_iCarWidth
iHeight
width() - m_iDiameter - m_iCarWidth * 2
m_iDiameter - m_iCarWidth * 2);
path = path.united(pathRect);
pathRect.addEllipse(width() - m_iDiameter + m_iCarWidth
iHeight
m_iDiameter - m_iCarWidth * 2
m_iDiameter - m_iCarWidth * 2);
path = path.united(pathRect);
//painter.drawPath(path);
QFont font;
font.setPointSize(m_iSize);
painter.setFont(font);
if(m_type == Right)
{
if(m_index >= m_iCar)
{
m_index = 0;
}
}
else if(m_type == Left)
{
if(m_index <= -m_iCar)
{
m_index = 0;
}
}
for(int i = 0 ; i < m_iCar ; i++ )
{
QPointF point = path.pointAtPercent(i / (m_iCar * 1.0));
int index = m_type == Right ? (i + m_index) % m_iCar + 1 : (i + m_iCar + m_index) % m_iCar + 1;
painter.setPen(m_textColor);
painter.drawText(point QString(“%1“).arg(index));
mapColorCar::iterator iter = m_mapCar.find(index);
if( iter != m_mapCar.end())
{
painter.setPen(iter.value());
painter.setBrush(iter.value());
}
else
{
pain
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3739 2018-08-13 14:41 跑马灯\carwidget.cpp
文件 3306 2018-08-13 14:41 跑马灯\carwidget.h
目录 0 2018-08-13 15:07 跑马灯
----------- --------- ---------- ----- ----
7045 3
- 上一篇:ICL8038信号发生器PROTUES仿真绝对好使
- 下一篇:example.zip
相关资源
- qt activemq mqtt 动态库
- Windows下基于Opencv+Qt的视频聊天客户端
- PyQt5:简单视频播放器
- Qt 使用sendemailapi实现邮件发送
- 关于QT多线程子线程使用信号和槽
- QT 窗口切换
- qt操作office文件的程序
- QTP10破解文件mgn-mqt82
- QT5日历源码
- Linux系统下基于Qt的局域网即时通信系
- QT TableView自定义委托
- 基于QT的简单视频播放器
- UR优傲机器人说明书
- tcpNum.zip
- QT项目code.rar
- qt做一个带有日历和钟表的界面
- 树莓派教程--Qt工程中使用DHT11传感器
- QT实现学生管理系统123783
- qt虚拟键盘26键和数字键
- 基于Qt界面显示的温湿度检测
- qt-opensource-linux-x64-5.7.0.run.txt
- 利用Qt实现的N皇后算法
- beatMouse.zip
- Qt 使用QPainter类在子控件上画图
- 基于Qt绘制的时间轴demo
- linux下QT游戏五子棋源代码
- QT中实现8个基本对话框
- QT自绘滑条控件Slider,可设置横向和纵
- A星算法代码QT运行
- QT带有滑动效果的图片浏览器
评论
共有 条评论