#include <QApplication>
#include <QWidget>
#include <QTimer>
#include <QPainter>
#include <QVector>
#include <QPointF>
#include <cmath>
class Triangle {
public:
double angle; // Rotation angle
double scale; // Scale factor
Triangle
(QPointF pos
) : position
(pos
), angle
(0), scale
(1) {}
void update() {
// Update angle and scale for animation
angle += 1; // Rotate by 1 degree
scale = 1 + 0.5 * sin(M_PI * angle / 180); // Scale between 1 and 1.5
}
};
class TriangleWidget
: public QWidget { QVector<Triangle> triangles;
public:
// Initialize triangles
for (int i = 0; i < 10; ++i) {
triangles.
append(Triangle
(QPointF(100 + i
* 50,
100)));
}
// Set up the timer
connect(&timer, &QTimer::timeout, this, &TriangleWidget::updateAnimation);
timer.start(16); // Approximately 60 FPS
}
protected:
painter.
setRenderHint(QPainter::Antialiasing);
for (const Triangle &triangle : triangles) {
painter.save();
painter.translate(triangle.position);
painter.rotate(triangle.angle);
painter.scale(triangle.scale, triangle.scale);
painter.restore();
}
}
private:
void updateAnimation() {
for (Triangle &triangle : triangles) {
triangle.update();
}
update(); // Trigger a repaint
}
};
int main(int argc, char *argv[]) {
TriangleWidget window;
window.resize(800, 600);
window.show();
return app.exec();
}
#include <QApplication>
#include <QWidget>
#include <QTimer>
#include <QPainter>
#include <QVector>
#include <QPointF>
#include <cmath>
class Triangle {
public:
QPointF position;
double angle; // Rotation angle
double scale; // Scale factor
Triangle(QPointF pos) : position(pos), angle(0), scale(1) {}
void update() {
// Update angle and scale for animation
angle += 1; // Rotate by 1 degree
scale = 1 + 0.5 * sin(M_PI * angle / 180); // Scale between 1 and 1.5
}
};
class TriangleWidget : public QWidget {
QVector<Triangle> triangles;
QTimer timer;
public:
TriangleWidget(QWidget *parent = nullptr) : QWidget(parent) {
// Initialize triangles
for (int i = 0; i < 10; ++i) {
triangles.append(Triangle(QPointF(100 + i * 50, 100)));
}
// Set up the timer
connect(&timer, &QTimer::timeout, this, &TriangleWidget::updateAnimation);
timer.start(16); // Approximately 60 FPS
}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
for (const Triangle &triangle : triangles) {
painter.save();
painter.translate(triangle.position);
painter.rotate(triangle.angle);
painter.scale(triangle.scale, triangle.scale);
painter.drawPolygon(QPolygonF() << QPointF(0, -20) << QPointF(-20, 20) << QPointF(20, 20));
painter.restore();
}
}
private:
void updateAnimation() {
for (Triangle &triangle : triangles) {
triangle.update();
}
update(); // Trigger a repaint
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
TriangleWidget window;
window.resize(800, 600);
window.show();
return app.exec();
}
To copy to clipboard, switch view to plain text mode
Bookmarks