ZBLOG

修改为线程或者定时器 ,不能阻塞后面程序,保证gif能够播放 void showGIF(qint16 window_with,qint16 window_hight,qint16 gif_with = 320,qint16 gif_hight = 320,qint32 time = 20000) { //引用资源文件 QMovie *movie = new QMovie(":/GIF/03.gif"); QLabel *label=new QLabel ("", ...

为了确保 GIF 可以播放而不会阻塞后续程序,可以使用定时器或线程来管理 GIF 播放。下面的代码展示了如何使用 QTimer 来非阻塞地显示 GIF,并在指定时间后关闭它。

使用 QTimer 的示例代码

以下是更新后的 showGIF 函数,利用 QTimer 处理 GIF 播放而不阻塞主线程:

#include <QApplication>
#include <QLabel>
#include <QMovie>
#include <QTimer>
#include <QDebug>

void showGIF(qint16 window_with, qint16 window_hight, qint16 gif_with = 320, qint16 gif_hight = 320, qint32 time = 20000)
{
    // 引用资源文件
    QMovie *movie = new QMovie(":/GIF/03.gif");
    
    if (!movie->isValid()) {
        qDebug() << "Failed to load GIF file.";
        delete movie; // 删除无效对象以避免内存泄漏
        return;
    }

    QLabel *label = new QLabel("", nullptr);
    
    if (label) {
        // 在桌面居中显示并固定标签大小
        label->setGeometry((window_with - gif_with) / 2, (window_hight - gif_hight) / 2, gif_with, gif_hight);
        label->setMovie(movie);
        label->setScaledContents(true);

        label->setWindowFlags(Qt::SplashScreen); // 设置为 SplashScreen,无边框窗口,不在任务栏显示
        
        movie->start(); // 启动动画
        label->show(); // 显示标签

        // 创建一个定时器,设定超时时间 
        QTimer *timer = new QTimer(label);

        QObject::connect(timer, &QTimer::timeout, [=]() {
            label->close();
            delete movie;
            delete label;
            timer->stop(); 
            timer->deleteLater(); 
        });

        timer->start(time); // 启动定时器

        QApplication::processEvents(); // 保持应用响应 
    }
}

核心修改点:

  1. 使用 QTimer:创建了一个 QTimer 对象来处理延迟关闭的逻辑。
  2. 信号与槽连接:通过连接 timeout() 信号和相关槽,当达到预设时间后,关闭窗口并释放资源。
  3. 非阻塞设计:整个过程不会阻塞主线程,从而保证其他事件仍然可以被处理。

注意事项:

  • 确保将此函数放入合适的上下文中,例如 Qt 的主窗口或其他 UI 元素中,以确保它能正确显示。
  • 如果需要进一步优化,请根据具体项目需求调整代码结构和资源管理。


    内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20858

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?