写点什么

Qt|模态窗口如何实现进入页面等待加载数据效果

  • 2022-10-21
    河北
  • 本文字数:814 字

    阅读完需:约 1 分钟

我们在使用浏览器加载数据时会发现,很多情况下,都是进入某个页面后进行数据加载,例如,网速较慢时,就会出现等待框,等数据获取完成后会将数据展现出来。


对于非模态的窗口的创建,如下所示:

QMyWidget *widget = new QMyWidget(this);/*数据的数据传输*/widget->show();
复制代码

之前的文章我也有讲述,如何在非模态窗口中如何边加载数据边展示页面,如果想要了解的可以查看这里Qt中实现边加载数据边显示页面


在上述文章中,是重写了 QWidget::show()函数,窗口一进行创建则启动定时器,进行数据加载。


那么在模态窗口:QDialog 作为父类,也可以这样吗?


是要重写 QDialog::exec()函数吗?


如果有这种想法的同学,可以尝试一下哟~


经过试验后会发现,重写 exec 后还是会照样阻塞,等界面数据彻底加载完成之后才会进行展示。


那么我们该如何实现边加载数据边展示页面的效果呢?


其实 QDialog 的父类就是 QWidget,当窗口被初始化且需要展示时,会走到一个叫做:void showEvent(QShowEvent *event) override;函数中。


无论是 QWidget 作为父类的窗口还是 QDialog 作为父类的窗口,都是一样的。


Qt 官网上对 ShowEvent 的解释是这样子的:

说明:

QShowEvent 类提供在显示小部件时发送的事件

有两种显示事件:由窗口系统引起的显示事件(自发的)和内部显示事件。

自发(QEvent:: Spontaneous())显示事件在窗口系统显示窗口之后发送;它们也会在顶级窗口图标化后重新显示时发送。


内部的 show 事件是在小部件变得可见之前交付的。


当进入到当前窗口后,窗口内部的所有控件都是属于该窗口的小部件,所以,对于小部件的显示和隐藏我们可以在经过系统的处理后,也就是 QDialog::showEvent(event);再进行我们实际的业务处理。


也就如同非模态窗口一样,直接开启了数据加载定时器,让我们在展示页面的同时进行数据加载,等数据处理结束之后,再展示。也就实现了等待效果。


对于模态窗口而言,难点在于使用哪个系统函数(showEvent)进行处理,对于实际的 UI 逻辑并不是难点。


我是中国好公民 st,一名 C++程序媛~

发布于: 刚刚阅读数: 5
用户头像

书山有路勤为径,学海无涯苦作舟 2022-07-01 加入

擅长语言:C++ 涉及语言:Python

评论

发布
暂无评论
Qt|模态窗口如何实现进入页面等待加载数据效果_c++_中国好公民st_InfoQ写作社区