返回顶部
首页 > 资讯 > 精选 >Qt如何实现边加载数据边显示页面
  • 221
分享到

Qt如何实现边加载数据边显示页面

2023-06-28 23:06:33 221人浏览 安东尼
摘要

这篇“Qt如何实现边加载数据边显示页面”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt如何实现边加载数据边显示页面”文章吧

这篇“Qt如何实现边加载数据边显示页面”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt如何实现边加载数据边显示页面”文章吧。

    1.定义显示定时器

    想要一打开页面就加载数据,我们需要重写QWidget::show(),开启定时器,并且要立即执行。

    1:定义定时器

    //.h#include <QTimer>QTimer *m_Timer;//.cpp使用m_Timer = new QTimer(this);connect(m_Timer, &QTimer::timeout, this, &QMyWidget::OnTimerLoadData);

    2:定时器调用

    void QMyWidget::show(){    QWidget::show();    m_timer->start(0);}

    打开页面需要立即执行定时器操作,此时start中的参数=0,表示立即执行。

    此时,显示页面已经加载出来了。

    因为前面说过了,页面的数据量比较多,不可能显示页面之后处于假死的状态,那么,我们需要加载页面的同时,显示一个gif的等待图标。

    这里,我们就需要修改一下show()的函数

    void QMyWidget::show(){    QWidget::show();    //页面启动后,直接显示加载gif图片    gPageManager::instance()->GetDownloadDlg()->SetShowMode(1);    gPageManager::instance()->GetDownloadDlg()->SetTips("正在加载案例数据,请稍后...");    gPageManager::instance()->GetDownloadDlg()->show();    if (m_timer->isActive() == false)    {        m_timer->start(0);        }}

    这里,我用了一个单例类:gPageManager调用具有gif效果图的窗口。

    这种方式就可以实现,显示页面以后,直接等待数据加载,防止我们看到假死页面,给用户造成困恼。

    这里的gif图片是用一个QLabel承载显示的,方法很多,不过多介绍。

    这里提醒的是:在使用QT中的定时器,比较安全的做法是,判断该定时是否处于活跃状态,只有再非活跃状态下才需要触发。这里只做温馨提示哦,个人代码习惯而已~

    3:定时器加载数据

    当进入定时器之后,进行数据处理。为了防止页面卡顿,此时,在定时器中我们也要重新开启一个线程,用于数据加载。

    此时,就会有人想问,当前页面已经开启了一个定时器,为什么还要再创建一个线程呢?

    下面我会一一解答的。

    C语言的函数中,运行指定函数中的内容时,只有运行到"}"时,才会显示运行页面。在某个特定的具体处理函数中计算机在处理时属于一个过程处理函数。

    所以,才会在一显示页面就开启定时器操作,首先将页面展示给用户,在做其他的数据处理。

    那么为什么要在定时器中再开一个线程呢?

    主要是因为在show函数中调用了一个动态加载的窗口,假设定时器中直接加载较多数据时,此时,界面也会处于一个卡顿状态,导致GIF等待窗口被卡住。为了防止这种情况出现,我们需要在定时器中继续开一个线程,防止页面卡顿。

    void QMyWidget::OnTimerLoadData(){    //因为只是在打开页面时加载数据,所以,定时器只需要进行一次即可。    m_Timer->stop();        //启动线程,加载数据,具体代码这里不具体说明。        //数据加载完之后,隐藏GIF动态加载页面    gPageManager::instance()->GetDownloadDlg()->hide();}

    到这里,打开页面直接显示加载的功能已经完成了,那么该如何实现当前线程呢?

    接下来,是我们第二个阶段的内容了~

    2.线程加载数据

    一般c++程序员在遇到这种情况时,通常很自然的就想要了,使用线程的方式。

    其实,我第一个思路也是使用线程加载数据。但是使用线程必须要考虑到线程存在的弊端,比如说死,比如说出现野指针等问题。

    在QT中有一种开线程的方式,简单容易上手,这里我还是比较推荐使用的:QtConcurrent::run

    该函数的具体讲解这里不做讲解,我们直接使用吧!

    首先需要的头文件:

    #include <QtConcurrent/QtConcurrentRun>

    接下来是调用方式,这里我们定义加载数据的函数名叫做LoadWidgetData()

    QFuture<bool> futureResult = QtConcurrent::run(this, &QMyWidget::LoadWidgetData);while (!futureResult.isFinished()){    QApplication::processEvents(QEventLoop::AllEvents);}

    使用这种线程方式的时候,需要注意了,LoadWidgetData函数的返回值一定是true才可以

    bool QMyWidget::LoadWidgetData(){    //具体的数据加载操作    return true;}

    线程的加载方式已经介绍完了,到这里,我们已经可以实现一遍加载数据,一遍显示等待GIF效果了。

    接下来,我们该实现如何实时呈现加载进度了~

    3.实时呈现加载进度

    大家都知道,在QT的线程中是无法调用页面操作内容的。

    一般情况下的页面操作,比如窗口创建、控件赋值等等都需要在主线程进行,否则会造成崩溃问题。具体原因大家可以查阅资料去。

    那么,我们要实现边加载数据边在页面上展示的时候,该如何操作呢?

    在这里,我们可以用发消息的方式,在线程中发送消息给主进程,交给主进程处理页面操作

    bool QMyWidget::LoadWidgetData(){    //1:加载数据内容1,具体实现不说明        //发送数据内容1对应的页面处理操作    emit Msg_SendSelfDataProcessing1();        //...数据加载内容自由发挥,类似于 上面两步骤内容        return true;}

    代码看起来很好理解,这种方式既保证了数据加载流畅,也不对主页面造成卡顿现象。

    以上就是关于“Qt如何实现边加载数据边显示页面”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: Qt如何实现边加载数据边显示页面

    本文链接: https://lsjlt.com/news/321397.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Qt如何实现边加载数据边显示页面
      这篇“Qt如何实现边加载数据边显示页面”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Qt如何实现边加载数据边显示页面”文章吧...
      99+
      2023-06-28
    • Qt实现边加载数据边显示页面的示例代码
      目录1.定义显示定时器1:定义定时器2:定时器调用3:定时器加载数据2.线程加载数据3.实时呈现加载进度做过C++开发的人们都知道,无论是MFC框架还是QT框架,实现加载数据的等待效...
      99+
      2024-04-02
    • Ppt页面四周如何加边框
      这篇文章主要讲解了“Ppt页面四周如何加边框”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ppt页面四周如何加边框”吧!Ppt页面四周加边框的方法:1、打开一个需要给页面加边框的ppt;2、...
      99+
      2023-06-20
    • php如何实现边输入边显示查询结果功能
      这篇文章主要介绍了php如何实现边输入边显示查询结果功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php如何实现边输入边显示查询结果功能文章都会有所收获,下面我们一起来看看吧。PHP是一种常用的服务器端脚本...
      99+
      2023-07-06
    • css只显示行的下边线如何实现
      本篇内容介绍了“css只显示行的下边线如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!css只显示下边线的实现方法:1、打开一个htm...
      99+
      2023-07-05
    • 如何实现基于Ajax+div的“左边菜单、右边内容”页面效果
      小编给大家分享一下如何实现基于Ajax+div的“左边菜单、右边内容”页面效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!效果演示:①默认页面(index.jsp):②:点击左侧 用户管...
      99+
      2024-04-02
    • Ajax如何实现获取数据后显示在页面
      这篇文章主要介绍Ajax如何实现获取数据后显示在页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!主要功能流程介绍循环获取列表数据 点击列表数据进入详情页点击报名参加弹出报名成功提示...
      99+
      2024-04-02
    • Win7显示桌面图标移动到左侧(边)显示的实现方法
      得了干脆自己整一个算了。   下面介绍如何将Win7里的显示桌面改到开始按钮旁。右下角的显示桌面依然存在。   1、新建一个本文文档,将以下内容复制进去: 复制代码代码如下:[Shell] Command=2 IconF...
      99+
      2023-05-29
      桌面图标 Win7 实现 显示桌面 方法
    • vue如何添加数组页面及时显示
      目录如何添加数组页面及时显示给对象中添加数组如何添加数组页面及时显示 最近在做vue相关的项目,在过程中,遇到了很多问题,有的解决了,有的还没解决,其中一个比较好的问题是,一个评论回...
      99+
      2024-04-02
    • Vue如何实现页面加载占位
      这篇文章主要介绍了Vue如何实现页面加载占位的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue如何实现页面加载占位文章都会有所收获,下面我们一起来看看吧。效果如下思路与实现页面加载时用户等待,此时与用户交互的...
      99+
      2023-07-05
    • jQuery如何实现鼠标经过显示动画边框特效
      这篇文章将为大家详细讲解有关jQuery如何实现鼠标经过显示动画边框特效,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图:代码如下:<!DOCTYPE ...
      99+
      2024-04-02
    • PHP数组分页中如何处理数据边界?
      php 数组分页中处理数据边界的有效方法包括使用 array_slice() 函数(按指定长度和偏移量提取数据)和 array_chunk() 函数(将数组拆分为指定大小的块)。对于特殊...
      99+
      2024-05-01
      php 数组分页
    • 如何在php页面显示数据库内容
      要在PHP页面上显示数据库内容,您需要使用数据库连接,执行查询并将结果显示在页面上。以下是一个基本的示例,显示数据库中的内容:```...
      99+
      2023-09-04
      php 数据库
    • Qt如何实现密码显示按钮
      这篇文章主要介绍“Qt如何实现密码显示按钮”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Qt如何实现密码显示按钮”文章能帮助大家解决问题。PasswordLineEdit.h#ifndef ...
      99+
      2023-07-02
    • css如何实现矩形四个边角加粗
      小编给大家分享一下css如何实现矩形四个边角加粗,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、工具/原料htmlcss2、具体实现效果图html代码<b...
      99+
      2023-06-08
    • 如何在PHP项目中实现数据缓存和页面预加载?
      如何在PHP项目中实现数据缓存和页面预加载?随着互联网的发展,网站和应用程序的性能优化成为了一个重要的议题。其中,数据缓存和页面预加载是提高用户访问速度和改善用户体验的重要手段之一。在PHP项目中实现数据缓存和页面预加载,可以有效地减少数据...
      99+
      2023-11-02
      数据缓存 PHP项目 页面预加载
    • vue前端页面数据加载添加loading效果的实现
      目录前端页面数据加载添加loading效果具体实现全局loading配置1 再src/componennts/Spinner下面建立一个index.vue2 再utils下面tool...
      99+
      2024-04-02
    • jQuery如何编辑实现动态加载页面
      这篇文章主要介绍jQuery如何编辑实现动态加载页面,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!编辑实现动态加载页面function editFun(){ var&nbs...
      99+
      2024-04-02
    • Android实现ListView分页加载数据
      本文实例为大家分享了ListView分页加载数据的具体代码,供大家参考,具体内容如下 FenyeActivity package com.example.myapplicatio...
      99+
      2024-04-02
    • 使用Vant如何实现数据分页,下拉加载
      目录Vant-ui的van-list实现数据分页加载主要三个属性vant上拉加载更多,下拉刷新Vant-ui的van-list实现数据分页加载 <!DOCTYPE html&g...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作