【QtXlsx】在线程中写Excel的学习笔记

由于工程量大,担心在主线程把数据写入Excel,会导致界面卡顿,所以使用线程写Excel

Qtxlsx创建环境,在另一篇笔记说明

1.新建一个C++类,继承QObject,创建写Excel的线程

ave_excel_thread = new excel_thread;
    mythread_excel = new QThread(this);
    save_excel_thread->moveToThread(mythread_excel);
    mythread_excel->start();

2.“保存文件”槽函数:选择文件路径,输入文件名,把文件通过信号和槽发送给线程;

void Widget::on_btn_save_file_clicked()
{
    QString file_name = QFileDialog::getSaveFileName(this, tr("保存文件1"), "./", tr("Text File(*.xlsx)"));
    qDebug() << file_name;
    ui->lineEdit_filename->setText(file_name);
    connect(this,&Widget::signal_excel_save_file, save_excel_thread, &excel_thread::save_file);
    emit signal_excel_save_file(file_name);

}

3.在线程中,声明QXlsx::Document xlsx;声明Excel文件,并获取文件名,并创建文件名.xlsx文件;

.h
private:
    QXlsx::Document xlsx;
.cpp
void excel_thread::save_file(QString file_name)
{

    file_name_data = file_name;
    xlsx.saveAs(file_name);
}

4.主线程中,开始测试槽函数:创建一些数据,把数据(行,列,数据)通过信号发送给Excel线程

void Widget::on_btn_start_test_clicked()
{

    if(ui->lineEdit_filename->text().isEmpty())
    {
        QMessageBox::critical(this,"警告","请先选择文件保存",QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
        return;
    }
    connect(this, &Widget::signal_excel_save, save_excel_thread, &excel_thread::save_data);
    for (int i = 1; i < 3; i++)
    {
        for (int j = 1; j < 5; j++)
        {


            double k = i + j + 0.1*i;
            emit signal_excel_save(i, j, k);

        }

    }
}

5.线程中,往xlsx文件中写入数据,保存;

void excel_thread::save_data(int a, int b, double c)
{
    xlsx.write(a,b,c);
    qDebug() << a << b << c;
    xlsx.saveAs(file_name_data);

}

结果:

输出:

 

excel文件:

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值