资源简介
漂亮的仪表盘(widget.cpp)
代码片段和文件信息
#include “widget.h“
#include
#include
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
index = 0;
timer = new QTimer(this);
connect(timer SIGNAL(timeout()) this SLOT(timerout()));
timer->start(20);
// slider = new QSlider(this);
// slider->setGeometry(101040020);
// slider->setOrientation(Qt::Horizontal); // 水平方向
// slider->setMinimum(0); // 最小值
// slider->setMaximum(150); // 最大值
// slider->setSingleStep(1); // 步长
// connect(sliderSIGNAL(valueChanged(int))thisSLOT(sliderslot(int)));
}
Widget::~Widget()
{
}
void Widget::sliderslot(int val)
{
index = val;
//++index;
if(index>140)
index=0;
update();
}
void Widget::timerout()
{
++index;
if(index>140)
index=0;
update();
}
QRectF Widget::textRectF(double radius int pointSize double angle)
{
QRectF rectF;
rectF.setX(radius*qCos(angle*M_PI/180.0) - pointSize*2);
rectF.setY(radius*qSin(angle*M_PI/180.0) - pointSize/2.0);
rectF.setWidth(pointSize*4);
rectF.setHeight(pointSize);
return rectF;
}
void Widget::paintEvent(QPaintEvent * event)
{
Q_UNUSED(event);
QFont font(“Arial Rounded MT Bold“);
// 指针形状 - 多边形
static const QPoint secondHand[4] = {
QPoint(7 -12)//Y值控制指针在圆环的位置
QPoint(-7 -12)
QPoint(-1 -95)
QPoint(1 -95)
};
// 指针及其他位置颜色
QColor backgroundColor(94 94 94 255);//圆盘背景颜色
QColor redHandleColor(255 0 0);//指针颜色
QColor secondColor(0 0 0 150);//10步长的刻度颜色 黑
QColor minuteColor(255 255 255 150);//小格的刻度颜色
QColor halfColor(255 255 255 150);//半格的刻度颜色 白
int side = qMin(width() height());
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 平移坐标系原点至中心点
painter.translate(width() / 2 height() / 2);
// 缩放 //控制刻度的半径
painter.scale(side / 300.0 side / 300.0);
//绘制背景黑色圆盘 backgroundColor
QPen bgpen;
bgpen.setColor(backgroundColor);
bgpen.setWidth(120);
painter.setPen(bgpen);
painter.drawArc(-40-40808005760);
// 绘制指针
painter.setPen(Qt::NoPen);
painter.setBrush(redHandleColor);
painter.save();
//一共270度,分150格,每一格1.8度
painter.rotate(234+index*1.8);//180+(30*1.8)
painter.drawConvexPolygon(secondHand 4);
painter.restore();
//中心画一个红色圆环
QPen pen;
pen.setColor(QColor(25500));
pen.setWidth(10);
painter.setPen(pen);
painter.drawArc(-10-10202005760);
painter.setPen(secondColor);
// 绘制刻度线 (270度 / 15 = 18度)每大格间距18度
for (int i = 0; i < 20; ++i){
if(i>=3 && i<=7){
}else{
painter.drawLine(88 0 96 0);
}
painter.rotate(18);//按给定角度进行顺时针旋转
}
//设置字体大小
int radius = 95;//数字显示半径值
//QFont font = painter.font();
font.setBold(true);
painter.setFont(font);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4851 2018-08-05 16:48 widget.cpp
----------- --------- ---------- ----- ----
4851 1
- 上一篇:QT Hisi demo
- 下一篇:qt 实现画板
评论
共有 条评论