• 5977阅读
  • 6回复

【解决】如何先显示窗口,再加载里面的控件,如qtablewidget? [复制链接]

上一主题 下一主题
离线likezyp
 

只看楼主 倒序阅读 楼主  发表于: 2014-02-15
有一个widget, 里面有一个qtablewidget,用于显示从网上get到的数据,我把qtablewidget在构造函数里初始化并加载get到的数据。结果是这样,打开程序时,widget会和加载好的qtablewidget一起同时显示。但是这样在网速好的情况下也会加载很快。不过网速不好时,用QNetworkAccessManager get数据时会有一定的延迟,所以导致窗口反应一会才出现,这样我感觉体验不好。
我的想法是,先显示出widget窗口,再在qtablewidget部分显示一个loading,等get数据后再加载到qtablewidget。不过这个方法自己不会做,请教高手,谢谢。


下面是get的代码

void get(QString url, QString content){
    QNetworkRequest req;
    req.setUrl(QUrl(url+ content));
    QNetworkReply *reply=this->net->get(req);

    QEventLoop eventLoop;
    QTimer::singleShot(3000, &eventLoop, SLOT(quit()));//超时退出
    connect(net,SIGNAL(finished(QNetworkReply*)),&eventLoop,SLOT(quit()));

    eventLoop.exec();

    this->resultByte=reply->readAll();
    reply->deleteLater();
}

【解决】
QTimer::singleShot(0,this,SLOT(initional()));


离线rozendew

只看该作者 1楼 发表于: 2014-02-16
showEvent事件里使用qtimer的singleshot调用取数据加载函数。
我只是知道我所知道的
离线XChinux

只看该作者 2楼 发表于: 2014-02-16
写个initional()方法放下载与显示数据的代码,然后在构造方法末尾调用QTimer::singleShot(0,this,SLOT(initional()));

内容来自[手机版]
离线rozendew

只看该作者 3楼 发表于: 2014-02-16
我也喜欢定义个初始化函数,不过我觉得数据的加载应该放在 showEvent 里进行。
我只是知道我所知道的
离线likezyp

只看该作者 4楼 发表于: 2014-02-16
回 rozendew 的帖子
rozendew:showEvent事件里使用qtimer的singleshot调用取数据加载函数。 (2014-02-16 12:36) 

对对对,谢谢
离线likezyp

只看该作者 5楼 发表于: 2014-02-16
回 XChinux 的帖子
XChinux:写个initional()方法放下载与显示数据的代码,然后在构造方法末尾调用QTimer::singleShot(0,this,SLOT(initional()));
内容来自[手机版]  (2014-02-16 17:32) 

原来有这些功能,看来自己学的还太少,谢谢。
离线likezyp

只看该作者 6楼 发表于: 2014-02-16
回 rozendew 的帖子
rozendew:我也喜欢定义个初始化函数,不过我觉得数据的加载应该放在 showEvent 里进行。 (2014-02-16 18:09) 

我试试这个好用不
快速回复
限100 字节
 
上一个 下一个