网上视频抄的,用来自己看一下,看完就删掉
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_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
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);
}
}