​读取Excel表格数据,当数据量很大时,如果直接读取会造成ui界面卡顿,所以需要建立线程,在线程里读取数据。

一、建立继承QThread的读取数据类

建立读取数据线程,重写run()函数

.h文件如下:

#ifndef THREADREADDATA_H
#define THREADREADDATA_H
​
#include <QThread>
#include <QWaitCondition>
​
#include "ui_mainwindow.h"
​
class threadReadData : public QThread
{Q_OBJECT
​
public:explicit threadReadData(QObject *parent = nullptr);~threadReadData() override;
​void  handleFunc();
​QString filename;
​
signals:void  request(const QVariant var);
​
private:void run() override;
};
​
#endif // THREADREADDATA_H

.cpp文件如下:

#include "threadreaddata.h"
​
#include <QFileDialog>
#include <QAxObject>
#include <QStandardPaths>
#include <QDebug>
​
threadReadData::threadReadData(QObject *parent):QThread(parent)
{
​
}
​
threadReadData::~threadReadData()
{quit();
}
​
void threadReadData::handleFunc()
{if(!isRunning())start();
}
​
void threadReadData::run()
{//读取数据QAxObject *excel = new QAxObject();//建立excel操作对象excel->setControl("Excel.Application");//连接Excel控件excel->setProperty("Visible", false);//显示窗体看效果,选择ture将会看到excel表格被打开excel->setProperty("DisplayAlerts", true);//显示警告看效果QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿(excel文件)集合qDebug()<<"filename:"<<filename;workbooks->dynamicCall("Open(const QString&)", filename);//打开刚才选定的excelQAxObject *workbook = excel->querySubObject("ActiveWorkBook");QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",1);QAxObject *usedRange = worksheet->querySubObject("UsedRange");//获取表格中的数据范围
​QVariant var = usedRange->dynamicCall("Value");
​workbook->dynamicCall( "Close(Boolean)", false );excel->dynamicCall( "Quit(void)" );delete excel;//关闭excelemit request(var);
}

代码第39行,新建QVariant容器,将所有的数据读取到QVariant容器中保存,数据读取完毕后,关闭Excel表格,并将保存的数据发射出去。

二、实现【打开文件按钮】槽函数

通过QFileDialog::getOpenFileName()获取Excel文件名称,使用contains()函数判断文件类型是否正确,如果正确则启动数据读取线程函数m_thread.handleFunc()。

读取数据时,更新进度槽函数,当读取至99%时,等待数据读取完毕,然后进度条更新至100%。

读取数据槽函数如下:

void MainWindow::on_actionOpen_triggered()
{QString FileName = QFileDialog::getOpenFileName(this,tr("文件对话框"),QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation),tr("ALL files (*);;Excel Files(*.xlsx);;Text Files(*.txt)"));
//    qDebug() << "filename:" << FileName;ui->labelPath->setText(FileName);m_thread.filename = FileName;if(FileName.contains(".xlsx", Qt::CaseSensitive) != true){qDebug()<<"地址错误!";QMessageBox::information(nullptr, "地址错误", "地址错误,\n请重新选择!",QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);return;}
​progressBarTimer.start();
​ui->actionOpen->setEnabled(false);ui->actionStart->setEnabled(false);ui->actionPause->setEnabled(false);ui->actionStop->setEnabled(false);ui->actionForward->setEnabled(false);ui->actionBackward->setEnabled(false);ui->actionReset->setEnabled(false);m_thread.handleFunc();
​
}

进度条槽函数如下:

void MainWindow::on_progressBar_valueChanged()
{ui->progressBar->setValue(progressBarValue);if(progressBarValue >= 100){progressBarTimer.stop();progressBarValue = 0;ui->actionStart->setEnabled(true);ui->pushButtonSource->setEnabled(true);return;}if(progressBarValue < 99){progressBarValue += 1;}
}

这样就实现了线程读取Excel数据,ui界面不会卡顿。

关注微信公众号 小白技术栈 | lakalako,获取更多的内容,欢迎大家关注哦!

项目【QT5.13频谱分析软件】(三)——线程获取Excel表格数据相关推荐

  1. 项目【QT5.13频谱分析软件】(五)——总篇

    需要完整源码的可以留言邮箱,或者关注微信公众号 小白技术栈 | lakalako,后台回复[qt5频谱分析]获取完整源码,欢迎大家关注哦! 经过前面几小节我们已经完成了基本的功能,本节将对剩余部分及前 ...

  2. php导入excel表格数据,php页面导入excel表格数据-php导入excel 怎么获取excel表格数据...

    PHP如何导出当前页面中的表格至Excel 常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点.个人推荐用第三种方法,因为它可以跨平台使用. 1. 以.csv格式读取 将.xls转换成. ...

  3. php页面导入excel表格,php页面导入excel表格数据:php导入excel 怎么获取excel表格数据...

    导入excel文件,后端php处理导入的数据并存入数据库,需要前后端结合的demo! thinkphp3.2phpexcel导入最基本用法 先整个最基础的代码,理解了这个,后面非常简单了 $file_ ...

  4. 【STM32F767】使用RTThread和TouchGFX实现DIY数字仪表(三)——获取温湿度传感器数据

    目录: [STM32F767]使用RTThread和TouchGFX实现DIY数字仪表(一)--使用STM32CUBMX5.6移植touchGFX4.13 [STM32F767]使用RTThread和 ...

  5. 导入excel表格到数据库、导入excel表格到数据库代码、根据excel表格路径将数据导入到数据库、验证要导入的excel表格数据、根据路径获取MultipartFile、FileItem文件

    导入excel表格到数据库.根据路径导入excel表格到数据库代码.根据excel表格路径将数据导入到数据库.验证要导入的excel表格数据.根据路径获取MultipartFile.FileItem文 ...

  6. php如何打开excel文件,如何使用php获取excel文件数据

    文章主要介绍了php获取excel文件数据的方法.具有很好的参考价值.下面跟着小编一起来看下吧. 1.下载PHPExcel类,是一个文件夹,还得有一个文件PHPExcel.php,两个在同级目录 ? ...

  7. php读取excel文件的数据,如何使用php获取excel文件数据

    如何使用php获取excel文件数据 文章主要介绍了php获取excel文件数据的方法.具有很好的参考价值.下面跟着小编一起来看下吧. 1.下载PHPExcel类,是一个文件夹,还得有一个文件PHPE ...

  8. java 简单获取Excel表格内容(初学者)

    java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...

  9. 解压上传zip文件并获取excel表数据

    1.maven <!-- 解压rar --><dependency><groupId>com.github.junrar</groupId><ar ...

最新文章

  1. 升级将至,BCH各开发组已推出兼容新版本
  2. 【css】怎么让Chrome支持小于12px 的文字
  3. 使用 Windows PowerShell 实现 Web UI 自动化
  4. sap会计期间打开关闭
  5. 合法练习黑客技术?这15个网站也许可以帮到你
  6. java中的Sort函数,你值得看
  7. 一个抓取豆瓣图书的开源爬虫的详细步骤
  8. leetcode刷题:z字形变换
  9. 在ubuntu - linux系统下装TensorFlow(虚拟机)
  10. 论.NET反射、委托与模式关系 zt- -
  11. 由于Web服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面(http error 404.2、iis、0x800704ec)...
  12. H3C运维审计系统 Web配置指导(笔记)
  13. QOS端口限速EMAIL流量限速
  14. js图片截图粘贴和上传
  15. java记录访问次数_使用java中的session来记录访问次数
  16. jquery checkbox选中事件监听
  17. android 情景模式设置
  18. AI首席架构师6-AICA-从数据到知识-百度知识图谱技术及应用
  19. 禁闭岛 -- 看电影
  20. 2021年CFA最新学习资料!

热门文章

  1. 网桥15式:无线网桥用得好,成本的降低少不了
  2. 算法基础(二):master公式
  3. Excel实现自动显示日期且不自动改变
  4. 总体标准差、样本标准差、标准误差
  5. excel批量提取网页标题
  6. iphone充电图_哪些iPhone具有无线充电功能?
  7. Photon Pun
  8. Snipaste不容易被注意到的小技巧
  9. 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦
  10. java哥验证德巴赫猜想,C语言验证哥德巴赫猜想