如何用c++和QT画一个忽明忽暗的爱心?
时间: 2023-05-24 20:03:51 浏览: 99
A:
这里是一个简单的基于QT的C++实现:
```cpp
#include <QtGui>
class HeartWidget : public QWidget {
public:
HeartWidget(QWidget *parent = nullptr) : QWidget(parent) {
setFixedSize(100, 100);
setAttribute(Qt::WA_TranslucentBackground);
}
QSize sizeHint() const override {
return QSize(100, 100);
}
void paintEvent(QPaintEvent *event) override {
Q_UNUSED(event);
const qreal S = 0.8;
const qreal C = 1.6;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
QRadialGradient gradient(QPointF(50, 50), 50, QPointF(50, 50));
gradient.setColorAt(0.0, QColor(255, 100, 100, 150));
gradient.setColorAt(1.0, QColor(200, 50, 50, 100));
painter.setPen(Qt::NoPen);
painter.setBrush(gradient);
QPainterPath path;
path.moveTo(50, 15);
path.arcTo(20, 15, 60, 60, 0, 180);
path.lineTo(50, 85);
path.lineTo(80, 55);
path.arcTo(40, 15, 60, 60, 0, -180);
path.closeSubpath();
painter.translate(QPointF(0, height() / 2));
painter.scale(1, -1);
painter.scale(S, S);
painter.translate(QPointF(0, -C * path.boundingRect().center().y()));
painter.drawPath(path);
}
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
HeartWidget heart;
heart.show();
return app.exec();
}
```
关键是在`paintEvent`函数中绘制心形。
在这个例子中,我们使用QRadialGradient来绘制一个红色/粉色渐变,颜色变化范围从心形的中心点到它的边缘。
我们定义了一个`S`比例因子缩放因子和`C`垂直缩放因子,以便让心在窗口上居中。
我们还通过将Y坐标翻转来翻转窗口,以便填充心。最后,我们画出一个封闭的曲线。