吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 895|回复: 13
收起左侧

[已解决] QT关于程序初始化的操作

[复制链接]
隐藏英雄 发表于 2023-1-30 00:18
本帖最后由 隐藏英雄 于 2023-1-31 18:20 编辑

我有这样一个程序,在程序初始化主界面的时候,我需要先下载一些资源文件用于初始化主界面, 这个下载过程是异步进程,
我要怎么做才能让程序在这些资源文件下载并解压完成后 再进行初始化主界面?

划重点:相当于在主窗口初始化到一半的时候 插入一个GIF窗口,并且主窗口暂停等待资源下载,等待资源下载完成后 继续初始化,关闭GIF窗口,显示主窗口
QQ图片20230130093201.png
在main函数里我做了以下代码

[C++] 纯文本查看 复制代码
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    WORKTOOL w;

    LoadingWdt lwdt;  //一个正在加载中的GIF窗口
    lwdt.exec();  //  这个需要在资源下载完成后关闭,然后显示a.exec();
   
    w.show();//主窗口,  现在是主窗口被上面的GIF窗口替代了,程序不能暂停等待资源的下载完成
    return a.exec();
}



QQ图片20230130001631.png

QQ图片20230130001810.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

236A 发表于 2023-1-30 07:55
本帖最后由 236A 于 2023-1-30 08:07 编辑

可以在他的窗口显示的时候下手 void xxxxx::showEvent(QShowEvent*msg)//qt窗口显示事件  或者在他的构造函数中直接隐藏主窗口 显示gif窗口 开个定时器不停的判断你的资源是否下载完成

免费评分

参与人数 1吾爱币 +1 收起 理由
隐藏英雄 + 1 热心回复!

查看全部评分

 楼主| 隐藏英雄 发表于 2023-1-30 09:17
236A 发表于 2023-1-30 07:55
可以在他的窗口显示的时候下手 void xxxxx::showEvent(QShowEvent*msg)//qt窗口显示事件  或者在他的构造函 ...

现在的流程是  在程序初始化主窗口之前插入一个窗口 同时让程序初始化暂停。等待资源的下载完成,在等待的过程中显示的是GIF窗口,    资源下载完以后接着开始初始化主窗口,,,

点击程序--->程序开始运行---->主窗口代码做一下其他处理以后请求开始下载(弹出GIF窗口)-->(GIF窗口继续在显示)这时候主程序暂停等待——>资源在下载中(GIF窗口显示,主窗口初始化继续暂停等待)——>资源下载完成(主程序停止暂停,开始接着之前被暂停的代码开始初始化)--》初始化完成(关闭GIF窗口,显示主窗口前)
sapoiuyt 发表于 2023-1-30 09:25
2个窗体,一个主窗体运行后hide隐藏。 再启用一个动画加载窗体。 线程运行的下载完成后,给信号这两个窗体,一个显示,一个关闭。
 楼主| 隐藏英雄 发表于 2023-1-30 09:34
本帖最后由 隐藏英雄 于 2023-1-30 09:35 编辑
sapoiuyt 发表于 2023-1-30 09:25
2个窗体,一个主窗体运行后hide隐藏。 再启用一个动画加载窗体。 线程运行的下载完成后,给信号这两个窗体 ...

这样做的话主程序并没有等待资源的准备完成,  加载出来的主窗口会缺少数据库和一下其他东西,比如  程序基本上是空的,没有数据,和图片什么的

QQ图片20230130093201.png
arg10 发表于 2023-1-30 09:37
看不懂  也想学学
androids7 发表于 2023-1-30 09:57
写一个WHILE?加信号锁
 楼主| 隐藏英雄 发表于 2023-1-30 10:01
androids7 发表于 2023-1-30 09:57
写一个WHILE?加信号锁

这个要怎么写?》
池塘春草 发表于 2023-1-30 10:43
qt有现成的解决方案,QSplashScreen值得拥有。建议百度或者google下,或者看下assistant。记得给我加分哦
[C++] 纯文本查看 复制代码
int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     QPixmap pixmap(":/splash.png");
     QSplashScreen splash(pixmap);
     splash.show();
     app.processEvents();
     ...
     QMainWindow window;
     window.show();
     splash.finish(&window);
     return app.exec();
 }
Snipaste_2023-01-30_10-40-59.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
隐藏英雄 + 1 + 1 我很赞同!

查看全部评分

 楼主| 隐藏英雄 发表于 2023-1-30 10:46
本帖最后由 隐藏英雄 于 2023-1-30 10:48 编辑
池塘春草 发表于 2023-1-30 10:43
qt有现成的解决方案,QSplashScreen值得拥有。建议百度或者google下,或者看下assistant。记得给我加分哦:l ...

大哥你这样直接抄过来   我也不懂啊 ,  我这小学生的代码水平。。。。

下面就是需要阻塞的地方,阻塞过程中显示GIF  收到解压完成的信号,  停止阻塞,关闭GIF  开始接着初始化主窗口
QQ图片20230130104703.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表