• 10245阅读
  • 12回复

[讨论]QSplashScreen创建启动画面一闪而过,怎么解决啊? [复制链接]

上一主题 下一主题
离线chenlong1258
 

只看楼主 倒序阅读 楼主  发表于: 2014-04-13
关键词: QSplashScreen
#include <QApplication>#include <QSplashScreen>#include <QPixmap>#include <mainwindow.h>#include <QDateTime>#include <QDebug>
int main(int argc, char *argv[]){    QApplication app(argc, argv);
    QPixmap pixmap("screen.png");    QSplashScreen screen(pixmap);    screen.show();    app.processEvents();    screen.showMessage("LOVE");
    QDateTime n=QDateTime::currentDateTime();
    QDateTime now;    do{    now=QDateTime::currentDateTime();    } while (n.secsTo(now)<=5);//6为需要延时的秒数
    MainWindow window;    window.show();
    screen.finish(&window);
    return app.exec();}
上面这段代码,启动画面总是一闪而过,看了网上说法加延时,但是感觉这个延时加的是整个程序(启动画面+window启动)的延时,而不是启动画面运行的延时,有谁知道这是啥原因吗?要如何解决啊?
离线realfan

只看该作者 1楼 发表于: 2014-04-14
试了一下,没有问题呀。
另外,延迟6秒,可以用QThread::msleep(6000)
离线dbzhang800

只看该作者 2楼 发表于: 2014-04-14
1. 这地方不适合加延迟。本来就是因为程序启动耗时,才会显示个Splash Screen 来使得用户不至于太烦躁的,这地方再加延迟,只会使得程序启动更慢。
2.  一闪而过 也不排除你程序简单,运行本身就很快。
离线青春岁月

只看该作者 3楼 发表于: 2014-04-14
这是我的一个splash 可以参考一下
go!   go!  go!  go!
离线dbzhang800

只看该作者 4楼 发表于: 2014-04-14
show() 后面加 processEvents(); 是对的

但是 qSleep() 用在这儿就有问题了。
离线青春岁月

只看该作者 5楼 发表于: 2014-04-15
木有问题亚,我这里使用正常!
go!   go!  go!  go!
离线dbzhang800

只看该作者 6楼 发表于: 2014-04-15
回 青春岁月 的帖子
青春岁月:木有问题亚,我这里使用正常! (2014-04-15 08:26) 

程序启动慢了6秒,这还是不是大问题么
离线abcdlcq

只看该作者 7楼 发表于: 2014-04-17
放在堆里,new出来没问题
离线青春岁月

只看该作者 8楼 发表于: 2014-04-18
那这个延时你想怎么弄?
go!   go!  go!  go!
离线dbzhang800

只看该作者 9楼 发表于: 2014-04-18
回 青春岁月 的帖子
青春岁月:那这个延时你想怎么弄? (2014-04-18 15:12) 

你搞错的一个概念。不是为了显示splashscreen而去弄一个延时,而是当程序初始化时做的工作太多,以至于程序启动很慢时,为了不使用户着急,才弄了一个splash screen出来。这样,用户知道你的程序正在启动,而不是在想,怎么什么反应都没有,是启动出错了么?

另外,QTest 是用来测试程序的,不应该用在用户程序中。和其他模块不同,QtTest 并不保证其C++API 的二进制兼容性。
离线dbzhang800

只看该作者 10楼 发表于: 2014-04-18
换句话说:比如你的程序初始化需要10秒,用户双击你的程序图标,10秒后才能看到程序界面。此时就应该使用一个splashscreen,至少用户在这10秒内能看到屏幕上有个东西,更进一步的话,你还可以适时更新splashscreen上面显示的信息,直到启动完成,显示主界面。

现在的问题似乎是,你的程序启动很快,比如不到100毫秒,但是为了使用splashscreen,且使得用户能有足够时间欣赏这个splashscreen,人为加入了一个10秒的延迟?
离线青春岁月

只看该作者 11楼 发表于: 2014-04-20
学习了,谢谢!启动程序和splashscreen如何同时运行?用楼主的方法吗?
go!   go!  go!  go!
离线lanmanck

只看该作者 12楼 发表于: 2020-07-15
没啥卵用,应该这样模拟:睡眠1秒,显示进度1,睡眠2秒,显示进度2,直到最后再show主界面出来。
精彩博客:labisart.com
快速回复
限100 字节
 
上一个 下一个