用qt写一个花朵逐步盛开的demo
时间: 2023-05-23 20:06:03 浏览: 133
qt基础使用demo
A:好的,以下是一个用Qt写的花朵逐步盛开的demo:
```
#include <QApplication>
#include <QMainWindow>
#include <QPainter>
#include <QTimer>
class Flower : public QMainWindow {
Q_OBJECT
public:
Flower(QWidget *parent = nullptr) : QMainWindow(parent) {
setFixedSize(400, 400);
setWindowTitle("Flower");
m_timer = new QTimer(this);
connect(m_timer, &QTimer::timeout, this, &Flower::animate);
m_timer->start(30);
}
protected:
void paintEvent(QPaintEvent *event) override {
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 绘制花瓣
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(255, 0, 0, m_alpha));
painter.drawEllipse(width() / 2 - m_size / 2, height() / 2 - m_size / 2, m_size, m_size);
// 绘制花蕊
painter.setBrush(QColor(255, 255, 0, m_alpha));
painter.drawEllipse(width() / 2 - m_size / 6, height() / 2 - m_size / 6, m_size / 3, m_size / 3);
}
private slots:
void animate() {
// 缓慢增加花瓣大小和透明度
m_size += m_delta;
m_alpha += m_delta;
if (m_size >= 200) {
m_delta = -m_delta;
}
update();
}
private:
QTimer *m_timer;
int m_size = 10;
int m_alpha = 0;
int m_delta = 5;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Flower flower;
flower.show();
return app.exec();
}
#include "main.moc"
```
解释:
首先,我们定义了一个继承自QMainWindow的类Flower。在构造函数中,我们设置了窗口的固定大小和标题,并开启了一个定时器用于动画效果。在paintEvent()函数中,我们使用QPainter绘制了两个圆形,一个表示花瓣,一个表示花蕊。在animate()函数中,我们更新了花瓣大小和透明度,并根据需要改变变化的方向。最后,在main()函数中,我们创建了一个Flower对象并显示。
效果如下:
![flower.gif](https://cdn.luogu.com.cn/upload/image_hosting/edwgvezz.gif)
阅读全文