项目【QT5.13频谱分析软件】(三)——线程获取Excel表格数据
读取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表格数据相关推荐
- 项目【QT5.13频谱分析软件】(五)——总篇
需要完整源码的可以留言邮箱,或者关注微信公众号 小白技术栈 | lakalako,后台回复[qt5频谱分析]获取完整源码,欢迎大家关注哦! 经过前面几小节我们已经完成了基本的功能,本节将对剩余部分及前 ...
- php导入excel表格数据,php页面导入excel表格数据-php导入excel 怎么获取excel表格数据...
PHP如何导出当前页面中的表格至Excel 常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点.个人推荐用第三种方法,因为它可以跨平台使用. 1. 以.csv格式读取 将.xls转换成. ...
- php页面导入excel表格,php页面导入excel表格数据:php导入excel 怎么获取excel表格数据...
导入excel文件,后端php处理导入的数据并存入数据库,需要前后端结合的demo! thinkphp3.2phpexcel导入最基本用法 先整个最基础的代码,理解了这个,后面非常简单了 $file_ ...
- 【STM32F767】使用RTThread和TouchGFX实现DIY数字仪表(三)——获取温湿度传感器数据
目录: [STM32F767]使用RTThread和TouchGFX实现DIY数字仪表(一)--使用STM32CUBMX5.6移植touchGFX4.13 [STM32F767]使用RTThread和 ...
- 导入excel表格到数据库、导入excel表格到数据库代码、根据excel表格路径将数据导入到数据库、验证要导入的excel表格数据、根据路径获取MultipartFile、FileItem文件
导入excel表格到数据库.根据路径导入excel表格到数据库代码.根据excel表格路径将数据导入到数据库.验证要导入的excel表格数据.根据路径获取MultipartFile.FileItem文 ...
- php如何打开excel文件,如何使用php获取excel文件数据
文章主要介绍了php获取excel文件数据的方法.具有很好的参考价值.下面跟着小编一起来看下吧. 1.下载PHPExcel类,是一个文件夹,还得有一个文件PHPExcel.php,两个在同级目录 ? ...
- php读取excel文件的数据,如何使用php获取excel文件数据
如何使用php获取excel文件数据 文章主要介绍了php获取excel文件数据的方法.具有很好的参考价值.下面跟着小编一起来看下吧. 1.下载PHPExcel类,是一个文件夹,还得有一个文件PHPE ...
- java 简单获取Excel表格内容(初学者)
java 简单获取Excel表格内容(初学者) 代码: package cn.ccaih.read;import org.apache.poi.ss.usermodel.Cell; import or ...
- 解压上传zip文件并获取excel表数据
1.maven <!-- 解压rar --><dependency><groupId>com.github.junrar</groupId><ar ...
最新文章
- 升级将至,BCH各开发组已推出兼容新版本
- 【css】怎么让Chrome支持小于12px 的文字
- 使用 Windows PowerShell 实现 Web UI 自动化
- sap会计期间打开关闭
- 合法练习黑客技术?这15个网站也许可以帮到你
- java中的Sort函数,你值得看
- 一个抓取豆瓣图书的开源爬虫的详细步骤
- leetcode刷题:z字形变换
- 在ubuntu - linux系统下装TensorFlow(虚拟机)
- 论.NET反射、委托与模式关系 zt- -
- 由于Web服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面(http error 404.2、iis、0x800704ec)...
- H3C运维审计系统 Web配置指导(笔记)
- QOS端口限速EMAIL流量限速
- js图片截图粘贴和上传
- java记录访问次数_使用java中的session来记录访问次数
- jquery checkbox选中事件监听
- android 情景模式设置
- AI首席架构师6-AICA-从数据到知识-百度知识图谱技术及应用
- 禁闭岛 -- 看电影
- 2021年CFA最新学习资料!