QPaint绘制自定义仪表盘组件02刻度线
网上视频抄的,用来自己看一下,看完就删掉
ui,创建一个空的widget
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>
#include <QPaintEvent>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();protected:void paintEvent(QPaintEvent *event) override;private:Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{(void)event;QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// painter永远以自我为原点,处于(0,0)点// 将painter移动到(100, 100)位置// painter.translate(100, 100);// 继续以painter为原点移动(100, 100),此时画家的绝对位置为(200, 200)// painter.translate(100, 100);// 将painter移动到当前widget的中心位置painter.translate(rect().center());// 丢掉画笔painter.setPen(Qt::NoPen);// 设置画刷painter.setBrush(Qt::cyan);// 画刷会刷满这个封区域的颜色painter.drawPie(-230, -230, 460, 460, 0, 180 * 16);// 重新设置画笔painter.setPen(QPen(Qt::red, 5));painter.drawPoint(0, 0);// 设置单次旋转角度double single = 180 * 1.0 / 20;// 旋转20次for (int i = 0; i <= 20; ++i) {if (i % 5 == 0) {// 长刻度线painter.drawLine(200, 0, 230, 0);} else {// 短刻度线painter.drawLine(210, 0, 230, 0);}// 每次逆时针旋转single度painter.rotate(-single);}}