标签:还需 etc 方便 node confirm ops current cbo 中文
数据导出一般指导出到excel表格,可能有部分用户还需要导出到pdf,因为pdf基本上不可编辑,防止用户重新编辑导出的数据,excel可能绝大部分用过电脑的人都知道,广为流行,主要就是微软的office软件和金山的wps软件,所以只要涉及到导出数据的软件,基本上默认都是导出到excel,以便领导或者其他非软件专业人士打开看数据,或者二次分析数据,Qt中没有数据导出到excel相关的类,有一些第三方开源的比如qtxlsx、libxls等,很多初学者首先选择的是用qaxobject来调用excel的组件实现导出数据,这种方法比较原始,但是也功能强大,只要是excel接口提供的,都能实现,比如导出特定的图形等,缺点就是慢,速度真慢,几十万百万的数据量导出,卡出屎,说白了效率比较低,关键还不能跨平台,只能在WIN上,到了其他系统全部歇菜,而Qt的大量应用场景在linux系统,这也是Qt的起步发家的地方,而qtxlsx、libxls就很好的解决了这个问题,跨平台。本人更倾向于造个轮子,以便适应项目需要,比如接口一定要简单,速度一定要快,一定要跨平台(因为本人项目绝大部分都是嵌入式linux)。
通用数据导出组件功能特点:
皮肤开源:https://gitee.com/feiyangqingyun/QWidgetDemo https://github.com/feiyangqingyun/QWidgetDemo
文件名称:styledemo
体验地址:https://gitee.com/feiyangqingyun/QWidgetExe https://github.com/feiyangqingyun/QWidgetExe
文件名称:bin_sams.zip
void frmDataAlarm::on_btnExcel_clicked()
{
//先判断行数,超过一定大小弹出提示
QString str = ui->labResultCount->text();
QStringList list = str.split(" ");
int rowCount = list.at(1).toInt();
if (rowCount > 100000) {
QUIHelper::showMessageBoxError("不支持大量数据,请重新查询!", 3);
return;
}
if (rowCount > 10000) {
QString msg = QString("要导出的数据共 %1 条,请耐心等待!确定要导出数据吗?").arg(rowCount);
if (QUIHelper::showMessageBoxQuestion(msg) != QMessageBox::Yes) {
return;
}
}
QString fileName = API::getFileName("保存文件(*.xls)", QUIHelper::appPath() + "/db", QString("alarmlog_%1.xls").arg(STRDATETIME));
if (fileName.isEmpty()) {
return;
}
//设定导出数据字段及排序字段
QString columns = "LogID,PositionID,DeviceName,NodeName,NodeValue,NodeSign,Content,StartTime,ConfirmUser,ConfirmTime,ConfirmContent";
QString where = whereSql + " order by " + QString("LogID %1").arg(App::AlarmLogOrder);
QStringList content = DBHelper::getContent("AlarmLog", columns, where, "", ";");
QList<QString> columnNames;
QList<int> columnWidths;
columnNames << "编号" << "位号" << "控制器名称" << "探测器名称" << "报警值" << "单位" << "报警类型"
<< "触发时间" << "确认用户" << "确认时间" << "确认信息";
columnWidths << 50 << 80 << 120 << 100 << 50 << 50 << 100 << 135 << 80 << 135 << 120;
QString name = ui->ckNodeName->isChecked() ? ui->cboxNodeName->currentText() : "所有探测器";
QString type = name + "报警记录";
ExcelAPI::Instance()->saveExcel(fileName, type, type, "", columnNames, columnWidths, content);
QString msg = QString("导出%1").arg(type);
DBHelper::addUserLog(msg);
if (QUIHelper::showMessageBoxQuestion(msg + "成功!确定现在就打开吗?") == QMessageBox::Yes) {
QString url = QString("file:///%1").arg(fileName);
QDesktopServices::openUrl(QUrl(url, QUrl::TolerantMode));
}
}
标签:还需 etc 方便 node confirm ops current cbo 中文
原文地址:https://www.cnblogs.com/feiyangqingyun/p/11880223.html