QT实验之闪烁灯

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()函数来重新绘制灯。

相关推荐
灿飞屋19 分钟前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
xiaoye-duck34 分钟前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
总要学点什么2 小时前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
田甲2 小时前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言
严肃小白兔2 小时前
MATLAB 绘图与科研论文插图制作:图形设计、统计表达与矢量导出
开发语言·matlab·科研绘图
Funlang4 小时前
给机器写的 JavaScript 造个笼子
开发语言·javascript·ecmascript
普通人64 小时前
PHP文件读写完全指南
开发语言·php·1024程序员节
坤坤子吖5 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
一晌小贪欢5 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
xiaoye-duck6 小时前
《C++ 项目:手写大模型接入 SDK》LLMManager架构设计与实现
开发语言·网络·c++·语言模型