在 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
Qt4.6 实现转圈圈效果 - 详细代码示例

原文地址: https://www.cveoy.top/t/topic/fnc5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录