把黄色指针和红色指针画成两个三角形的指针,完善上面代码
时间: 2023-11-02 12:39:49 浏览: 32
好的,可以通过QPolygonF类来定义三角形的形状,并在paintEvent()函数中绘制出来。下面是修改后的代码:
```cpp
#include <QtWidgets>
class MyWidget : public QWidget {
public:
MyWidget(QWidget *parent = nullptr) : QWidget(parent) {
setFixedSize(300, 300);
m_angle = 0;
}
protected:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true); // 抗锯齿
// 绘制圆形
painter.setPen(QPen(Qt::black, 2));
painter.drawEllipse(10, 10, 280, 280);
// 绘制刻度
painter.setPen(QPen(Qt::black, 1));
painter.setFont(QFont("Arial", 8));
for (int i = 0; i < 360; i += 5) {
qreal x1 = 150 + 130 * qCos(qDegreesToRadians(i));
qreal y1 = 150 - 130 * qSin(qDegreesToRadians(i));
qreal x2 = 150 + (i % 10 == 0 ? 140 : 135) * qCos(qDegreesToRadians(i));
qreal y2 = 150 - (i % 10 == 0 ? 140 : 135) * qSin(qDegreesToRadians(i));
painter.drawLine(QPointF(x1, y1), QPointF(x2, y2));
if (i % 10 == 0) {
painter.save();
painter.translate(QPointF(x2, y2));
painter.rotate(90 - i);
painter.drawText(QPointF(-10, -5), QString::number(i));
painter.restore();
}
}
// 绘制指针
QPolygonF yellowPointer;
yellowPointer << QPointF(0, 0) << QPointF(15, -5) << QPointF(15, 5);
painter.setPen(QPen(Qt::yellow, 3));
painter.setBrush(Qt::yellow);
painter.save();
painter.translate(m_yellowPos);
painter.drawPolygon(yellowPointer);
painter.restore();
QPolygonF redPointer;
redPointer << QPointF(0, 0) << QPointF(15, -5) << QPointF(15, 5);
painter.setPen(QPen(Qt::red, 3));
painter.setBrush(Qt::red);
painter.save();
painter.translate(QPointF(150, 150));
painter.rotate(m_angle);
painter.drawPolygon(redPointer);
painter.restore();
}
void mousePressEvent(QMouseEvent *event) override {
if (event->button() == Qt::LeftButton) {
m_yellowPos = event->pos();
update();
}
}
void mouseMoveEvent(QMouseEvent *event) override {
if (event->buttons() & Qt::LeftButton) {
m_yellowPos = event->pos();
update();
}
if (event->buttons() & Qt::RightButton) {
QPointF delta = event->pos() - QPointF(150, 150);
m_angle = qRadiansToDegrees(qAtan2(-delta.y(), delta.x()));
update();
}
}
private:
QPointF m_yellowPos;
qreal m_angle;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
```
这段代码通过QPolygonF类来定义了黄色和红色指针的形状,然后在paintEvent()函数中利用QPainter对象绘制出来。运行程序后,可以看到一个有刻度的平面圆形图,其中有两条圆心出发的指针,黄色的指针可以随鼠标点击移动,红色的指针可以随鼠标移动而跟随。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)