修改绘制刻度所对应的字体让它绕平面圆形排列 void QDiscWidget::draw_disc_text(QPainter &p) { p.save(); QString text; QPen pen(QColor(255, 255, 255)); pen.setWidth(0.5); p.setPen(pen); QFont font("Microsoft YaHei", 3); p.setFont(font); int pointsize = font.pointSize(); int radius = 100; float width = pointsize * 3; float height = pointsize * 2; for(int i = 0; i < 12; ++i) { double y = -(double)radius * 0.97 * qCos(i * M_PI/ 6.0) -1.5; double x = -(double)radius * 0.97 * qSin(i * M_PI / 6.0) -2.5; if (i == 0) { text = "0"; } else { text = text.sprintf("%d", (360 - 30 * i)); } p.drawText(QRectF(x, y, width, height), Qt::AlignCenter, text); } p.restore(); }
时间: 2024-02-14 16:14:55 浏览: 75
qdraw.rar_QT_QT 绘制_Qdraw_qt draw_qt实现绘图
5星 · 资源好评率100%
可以使用 QPainter 的 rotate() 函数实现绘制刻度所对应的字体绕平面圆形排列。具体方法如下:
1. 将绘制原点移动至圆心处,即添加以下代码:
```
p.translate(QPointF(0, 0));
```
2. 在 for 循环中绘制每个刻度时,旋转 QPainter,使其与刻度对应的位置对齐。具体代码如下:
```
p.rotate(-30 * i);
```
3. 将绘制完一个刻度后的 QPainter 旋转回原来的位置。具体代码如下:
```
p.rotate(30 * i);
```
修改后的函数如下:
```
void QDiscWidget::draw_disc_text(QPainter &p) {
p.save();
QString text;
QPen pen(QColor(255, 255, 255));
pen.setWidth(0.5);
p.setPen(pen);
QFont font("Microsoft YaHei", 3);
p.setFont(font);
int pointsize = font.pointSize();
int radius = 100;
float width = pointsize * 3;
float height = pointsize * 2;
p.translate(QPointF(0, 0)); // 将绘制原点移动至圆心处
for(int i = 0; i < 12; ++i) {
double y = -(double)radius * 0.97 * qCos(i * M_PI/ 6.0) -1.5;
double x = -(double)radius * 0.97 * qSin(i * M_PI / 6.0) -2.5;
if (i == 0) {
text = "0";
} else {
text = text.sprintf("%d", (360 - 30 * i));
}
p.rotate(-30 * i); // 旋转 QPainter
p.drawText(QRectF(x, y, width, height), Qt::AlignCenter, text);
p.rotate(30 * i); // 旋转回原来的位置
}
p.restore();
}
```
阅读全文