Qt4.6 实现转圈圈效果 - 详细代码示例
在 Qt4.6 中实现转圈圈效果,可以使用 QPainter 和 QTimer 来完成。以下是一个简单的示例代码:
#include <QtGui>
class CircleWidget : public QWidget {
public:
CircleWidget(QWidget *parent = 0) : QWidget(parent) {
m_angle = 0;
m_timer = new QTimer(this);
connect(m_timer, SIGNAL(timeout()), this, SLOT(updateAngle()));
m_timer->start(50); // 每 50 毫秒更新一次角度
}
protected:
void paintEvent(QPaintEvent *) {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(Qt::NoPen);
int width = qMin(this->width(), this->height());
int radius = width / 2 - 10;
int centerX = this->width() / 2;
int centerY = this->height() / 2;
painter.setBrush(Qt::blue);
painter.drawEllipse(centerX - radius, centerY - radius, radius * 2, radius * 2);
painter.setBrush(Qt::yellow);
painter.save();
painter.translate(centerX, centerY);
painter.rotate(m_angle);
painter.drawEllipse(-radius / 2, -radius / 2, radius, radius);
painter.restore();
}
private slots:
void updateAngle() {
m_angle += 10; // 每次增加 10 度
if (m_angle >= 360) {
m_angle -= 360;
}
update(); // 更新绘图
}
private:
int m_angle;
QTimer *m_timer;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
CircleWidget circleWidget;
circleWidget.resize(200, 200);
circleWidget.show();
return app.exec();
}
在上述代码中,自定义的 CircleWidget 继承自 QWidget,并重写了 paintEvent 函数来绘制圆圈。在 paintEvent 函数中,使用 QPainter 绘制两个圆圈,一个为蓝色的背景圆圈,一个为黄色的旋转圆圈。通过 QTimer 来定时更新旋转角度,达到转圈效果。最后,在 main 函数中创建 CircleWidget 对象并显示出来。
关键点:
- 使用 QPainter 绘制圆圈
- 使用 QTimer 定时更新旋转角度
- 使用 translate 和 rotate 方法控制旋转圆圈的位置和角度
- 在 paintEvent 函数中重绘圆圈以实现动画效果
更多学习资源:
- Qt 文档: https://doc.qt.io/
- Qt 示例: https://doc.qt.io/qt-5/examples.html
- QPainter 类: https://doc.qt.io/qt-5/qpainter.html
- QTimer 类: https://doc.qt.io/qt-5/qtimer.html
原文地址: https://www.cveoy.top/t/topic/fnc5 著作权归作者所有。请勿转载和采集!