隐藏英雄 发表于 2023-1-30 00:18

QT关于程序初始化的操作

本帖最后由 隐藏英雄 于 2023-1-31 18:20 编辑

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

划重点:相当于在主窗口初始化到一半的时候 插入一个GIF窗口,并且主窗口暂停等待资源下载,等待资源下载完成后 继续初始化,关闭GIF窗口,显示主窗口

在main函数里我做了以下代码

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();
}






236A 发表于 2023-1-30 07:55

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

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

隐藏英雄 发表于 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隐藏。 再启用一个动画加载窗体。 线程运行的下载完成后,给信号这两个窗体 ...
这样做的话主程序并没有等待资源的准备完成,加载出来的主窗口会缺少数据库和一下其他东西,比如程序基本上是空的,没有数据,和图片什么的

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。记得给我加分哦:lol
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();
}

隐藏英雄 发表于 2023-1-30 10:46

本帖最后由 隐藏英雄 于 2023-1-30 10:48 编辑

池塘春草 发表于 2023-1-30 10:43
qt有现成的解决方案,QSplashScreen值得拥有。建议百度或者google下,或者看下assistant。记得给我加分哦:l ...
大哥你这样直接抄过来   我也不懂啊 ,我这小学生的代码水平。。。。

下面就是需要阻塞的地方,阻塞过程中显示GIF收到解压完成的信号,停止阻塞,关闭GIF开始接着初始化主窗口
页: [1] 2
查看完整版本: QT关于程序初始化的操作