資源簡介
使用qtcreator 繪制類似跑馬燈的效果 換行圈,可以設(shè)置每個(gè)小車的顏色

代碼片段和文件信息
#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()?
????//上下留5個(gè)像素
????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?????{
????????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
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????3739??2018-08-13?14:41??跑馬燈\carwidget.cpp
?????文件???????3306??2018-08-13?14:41??跑馬燈\carwidget.h
?????目錄??????????0??2018-08-13?15:07??跑馬燈
-----------?---------??----------?-----??----
?????????????????7045????????????????????3
評論
共有 條評論