120 lines
2.6 KiB
C++
120 lines
2.6 KiB
C++
#pragma once
|
||
#include "global.h"
|
||
|
||
#include <QApplication>
|
||
|
||
#include <QPropertyAnimation>
|
||
#include <QPainter>
|
||
#include <QTimer>
|
||
#include <cmath>
|
||
#include <QGraphicsDropShadowEffect>
|
||
|
||
#include "effect.h"
|
||
|
||
|
||
#include <QPainter>
|
||
#include <QPainterPath>
|
||
|
||
#include <QPainter>
|
||
#include <QPainterPath>
|
||
|
||
#include <QPainter>
|
||
#include <QPainterPath>
|
||
|
||
|
||
|
||
|
||
#include <QPainter>
|
||
#include <QPainterPath>
|
||
|
||
#include <QPainter>
|
||
#include <QPainterPath>
|
||
|
||
#include <QPainter>
|
||
#include <QPainterPath>
|
||
#include "Background.h"
|
||
struct Wave : PaintAble {
|
||
QColor color = Qt::blue;
|
||
QGraphicsDropShadowEffect shadowEffect;
|
||
Wave() {
|
||
shadowEffect.setBlurRadius(10); // 设置模糊半径
|
||
shadowEffect.setOffset(5, 5); // 设置阴影偏移量(x, y)
|
||
shadowEffect.setColor(Qt::black); // 设置阴影颜色
|
||
}
|
||
void paint(QPainter* painter, QRect rect) override {
|
||
|
||
}
|
||
};
|
||
|
||
template <typename Widget>
|
||
struct Wrapper : QMainWindow {
|
||
Wrapper() {
|
||
resize(400, 400);
|
||
auto* w = new Widget();
|
||
auto* ww = static_cast<QWidget*>(w);
|
||
ww->setParent(this);
|
||
ww->setFixedSize(200, 200);
|
||
ww->move(100, 100);
|
||
}
|
||
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
class WaveWidget : public QWidget
|
||
{
|
||
Q_OBJECT
|
||
|
||
public:
|
||
explicit WaveWidget(QWidget *parent = nullptr)
|
||
: QWidget(parent), m_offset(0) {
|
||
setFixedSize(400, 300); // 设置窗口大小
|
||
|
||
// 定时器:每隔一段时间更新一次动画
|
||
m_timer = new QTimer(this);
|
||
connect(m_timer, &QTimer::timeout, this, &WaveWidget::updateWave);
|
||
m_timer->start(16); // 约60fps
|
||
|
||
// 初始化动画
|
||
m_animation = new QPropertyAnimation(this, "wavePosition");
|
||
m_animation->setDuration(1000);
|
||
m_animation->setLoopCount(-1); // 无限循环
|
||
m_animation->setEasingCurve(QEasingCurve::Linear);
|
||
}
|
||
|
||
protected:
|
||
void paintEvent(QPaintEvent *event) override {
|
||
QPainter painter(this);
|
||
painter.setBrush(Qt::blue);
|
||
|
||
// 通过 m_offset 控制波浪的 y 坐标
|
||
int y = 150 + 50 * std::sin(m_offset); // 使用正弦波函数产生波浪效果
|
||
|
||
painter.drawEllipse(QPoint(200, y), 20, 20); // 绘制一个圆形
|
||
|
||
QWidget::paintEvent(event);
|
||
}
|
||
|
||
private slots:
|
||
void updateWave() {
|
||
// 每次更新时间,更新 m_offset 以形成波动效果
|
||
m_offset += 0.1;
|
||
if (m_offset > 2 * (3.14159265358979323846)) {
|
||
m_offset = 0; // 重新从0开始
|
||
}
|
||
update(); // 更新界面
|
||
}
|
||
|
||
private:
|
||
float m_offset; // 波动的偏移量
|
||
QTimer *m_timer;
|
||
QPropertyAnimation *m_animation;
|
||
};
|
||
|
||
|
||
|