您的当前位置:首页正文

Qt实现导出QTableWidgetQTableView数据

2020-08-27 来源:易榕旅网
Qt实现导出QTableWidgetQTableView数据

⽬录

⼀、前⾔⼆、功能特点三、体验地址四、效果图五、相关代码⼀、前⾔

本组件的初衷就是造⼀个轮⼦,让数据导⼊导出⽤法极致简单,⼏个⾏数⼏⾏代码搞定它,适⽤⼤部分的应⽤场景,这也是本组件和qtxls最⼤的区别,qtxls的⽬标是⼤⽽全,提供各种xls的接⼝,⾄于如何组织导出的数据,那需要程序员⾃⼰去处理,这就避免不了需要调⽤很多函数代码,⽽我们往往⼊门的程序员⽤起来没那么⽅便,⽐如很多⼈其实就想将现在

QTableWidget或者QTableView中的数据导出,也不想去研究如何组织数据,希望就是传⼊QTableWidget控件名称就⾏,什么字段名称、字段宽度、数据内容啥的,都不⽤管,因为控件都给你了,数据都在,具体实现函数去把它搞定就⾏,只要⽤的舒⼼舒服就好。

⼆、功能特点

组件同时集成了导出数据到csv、xls、pdf和打印数据。

所有操作全部提供静态⽅法⽆需new,数据和属性等各种参数设置采⽤结构体数据,极为⽅便。同时⽀持QTableView、QTableWidget、QStandardItemModel、QSqlTableModel等数据源。提供静态⽅法直接传⼊QTableView、QTableWidget控件,⾃动识别列名、列宽和数据内容。每组功能都提供单独的完整的⽰例,注释详细,⾮常适合各阶段Qter程序员。

原创导出数据机制,不依赖任何office组件或者操作系统等第三⽅库,⽀持嵌⼊式linux。速度超快,9个字段10万⾏数据只需要2秒钟完成。

只需要四个步骤即可开始急速导出海量数据⽐如100W条记录到Excel。同时提供直接写⼊数据接⼝和多线程写⼊数据接⼝,不卡主界⾯。可设置标题、副标题、表名。

可设置导出数据的字段名、列名、列宽。可设置末尾列⾃动拉伸填充,默认拉伸更美观。

可设置是否启⽤校验过滤数据,启⽤后符合规则的数据特殊颜⾊显⽰。可指定校验的列、校验规则、校验值、校验值数据类型。

校验规则⽀持 精确等于==、⼤于>、⼤于等于>=、⼩于<、⼩于等于<=、不等于!=、包含contains。校验值数据类型⽀持 整型int、浮点型float、双精度型double,默认⽂本字符串类型。可设置随机背景颜⾊及需要随机背景⾊的列集合。

⽀持分组输出数据,⽐如按照设备分组输出数据,⽅便查看。可设置csv分隔符、⾏内容分隔符、⼦内容分隔符。

可设置边框宽度、⾃动填数据类型,默认⾃动数据类型开启。

可设置是否开启数据单元格样式,默认不开启,不开启可以节约⼤概30%的⽂件体积。可设置横向排版、纸张边距等,⽐如导出到pdf以及打印数据。

⽀持图⽂混排导出数据到pdf以及打印数据,⾃动分页。

灵活性超⾼,可⾃由更改源码设置对齐⽅式、⽂字颜⾊、背景颜⾊等。⽀持任意excel表格软件,包括但不限于excel2003-2021、wps、openoffice等。纯Qt编写,⽀持任意Qt版本+任意编译器+任意系统。

三、体验地址四、效果图五、相关代码

void frmSimple::on_btnLoad1_clicked(){

//先设置数据模型,否则 setColumnWidth 不起作⽤ ui->tableView->setModel(model);

//设置列数及列标题和列宽

model->setColumnCount(column); //简便⽅法设置列标题集合

model->setHorizontalHeaderLabels(columnNames); for (int i = 0; i < column; ++i) {

ui->tableView->setColumnWidth(i, columnWidths.at(i)); }

//循环添加⾏数据

QDateTime now = QDateTime::currentDateTime(); model->setRowCount(row); for (int i = 0; i < row; ++i) {

for (int j = 0; j < column; ++j) {

QStandardItem *item = new QStandardItem; //最后⼀列显⽰时间区别开来 if (j == column - 1) {

item->setText(now.addSecs(i).toString(\"yyyy-MM-dd HH:mm:ss\")); } else {

item->setText(QString(\"%1_%2\").arg(i + 1).arg(j + 1)); }

model->setItem(i, j, item); } }}

void frmSimple::on_btnCsv1_clicked(){

QString file = QUIHelper::appPath() + \"/db/dataout_tableview.csv\";

DataHelper::DataOut(ui->tableView, model, 0, file, \"测试标题\测试信息\"); //打开刚才导出的⽂件

QUIHelper::openFile(file, \"导出测试信息\");}

void frmSimple::on_btnXls1_clicked(){

//通⽤函数直接传⼊控件#if 1

QString file = QUIHelper::appPath() + \"/db/dataout_tableview.xls\";

DataHelper::DataOut(ui->tableView, model, 1, file, \"测试标题\测试信息\");#else

//不传⼊⽂件名则会弹出对话框选择保存⽂件名

QString file = DataHelper::DataOut(ui->tableView, model, 1);#endif

//打开刚才导出的⽂件

QUIHelper::openFile(file, \"导出测试信息\");}

void frmSimple::on_btnPdf1_clicked(){

//通⽤函数直接传⼊控件

QString file = QUIHelper::appPath() + \"/db/dataout_tableview.pdf\";

DataHelper::DataOut(ui->tableView, model, 2, file, \"测试标题\测试信息\");

//打开刚才导出的⽂件

QUIHelper::openFile(file, \"导出测试信息\");}

void frmSimple::on_btnPrint1_clicked(){

//通⽤函数直接传⼊控件

DataHelper::DataOut(ui->tableView, model, 3, \"\测试标题\");}

void frmSimple::on_btnLoad2_clicked(){

//设置列标题和列数及列宽

ui->tableWidget->setColumnCount(column); //简便⽅法设置列标题集合

ui->tableWidget->setHorizontalHeaderLabels(columnNames); for (int i = 0; i < column; ++i) {

ui->tableWidget->setColumnWidth(i, columnWidths.at(i)); }

//添加数据

QDateTime now = QDateTime::currentDateTime(); ui->tableWidget->setRowCount(row); for (int i = 0; i < row; ++i) {

for (int j = 0; j < column; ++j) {

QTableWidgetItem *item = new QTableWidgetItem; //最后⼀列显⽰时间区别开来 if (j == column - 1) {

item->setText(now.addSecs(i).toString(\"yyyy-MM-dd HH:mm:ss\")); } else {

item->setText(QString(\"%1_%2\").arg(i + 1).arg(j + 1)); }

ui->tableWidget->setItem(i, j, item); } }}

void frmSimple::on_btnCsv2_clicked(){

QString file = QUIHelper::appPath() + \"/db/dataout_tablewidget.csv\"; DataHelper::DataOut(ui->tableWidget, 0, file, \"测试标题\测试信息\"); //打开刚才导出的⽂件

QUIHelper::openFile(file, \"导出测试信息\");}

void frmSimple::on_btnXls2_clicked(){

QString file = QUIHelper::appPath() + \"/db/dataout_tablewidget.xls\"; DataHelper::DataOut(ui->tableWidget, 1, file, \"测试标题\测试信息\"); //打开刚才导出的⽂件

QUIHelper::openFile(file, \"导出测试信息\");}

void frmSimple::on_btnPdf2_clicked(){

//通⽤函数直接传⼊控件

QString file = QUIHelper::appPath() + \"/db/dataout_tablewidget.pdf\"; DataHelper::DataOut(ui->tableWidget, 2, file, \"测试标题\测试信息\"); //打开刚才导出的⽂件

QUIHelper::openFile(file, \"导出测试信息\");}

void frmSimple::on_btnPrint2_clicked(){

//通⽤函数直接传⼊控件

DataHelper::DataOut(ui->tableWidget, 3, \"\测试标题\");}

以上就是Qt实现导出QTableWidget/QTableView数据的详细内容,更多关于Qt数据导出的资料请关注其它相关⽂章!

因篇幅问题不能全部显示,请点此查看更多更全内容