QT实验之闪烁灯
在QT中,使用QPainter来实现闪烁灯效果的一种方法是使用QTimer来周期性地改变灯的状态。
首先,你需要一个QPixmap对象,它包含了灯的图片。然后,使用QTimer来周期性地切换灯的状态。当灯的状态改变时,你需要重新绘制QPixmap。
以下是一个简单的示例:
cpp
#include <QApplication>
#include <QPainter>
#include <QLabel>
#include <QTimer>
class FlashingLight : public QLabel {
public:
FlashingLight(QWidget *parent = nullptr)
: QLabel(parent)
{
// 设置初始灯的状态为关闭
isOn = false;
// 创建一个定时器来改变灯的状态
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &FlashingLight::toggleLight);
timer->start(500); // 每500毫秒切换一次状态
}
protected:
void paintEvent(QPaintEvent *) override {
QPainter painter(this);
QPixmap pixmap(":/images/light.png"); // 加载灯的图片
painter.drawPixmap(0, 0, pixmap.scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
}
private slots:
void toggleLight() {
isOn = !isOn; // 切换灯的状态
update(); // 重新绘制灯
}
private:
bool isOn; // 灯的状态,true表示打开,false表示关闭
};
int main(int argc, char **argv) {
QApplication app(argc, argv);
FlashingLight light;
light.show();
return app.exec();
}
在这个示例中,FlashingLight是一个继承自QLabel的类。在paintEvent()函数中,我们使用QPainter来绘制一个QPixmap对象。这个QPixmap对象包含了灯的图片。我们使用QTimer来周期性地切换灯的状态。当灯的状态改变时,我们调用update()函数来重新绘制灯。