当前位置: 首页 > news >正文

莒县网站设计免费建网站

莒县网站设计,免费建网站,广州微信网站建设如何,div+css免费网站模板下载文章目录 效果图概述功能点代码分析导航栏表格更新视图表格导出表格过滤 总结 效果图 概述 本案例用于对数据库中的数据进行显示等其他操作。数据库的映射,插入等功能看此博客框架:数据模型使用QSqlTableModel,视图使用QTableView&#xff0…

文章目录

      • 效果图
      • 概述
      • 功能点
      • 代码分析
        • 导航栏
        • 表格更新视图
        • 表格导出
        • 表格过滤
      • 总结

效果图

概述

  • 本案例用于对数据库中的数据进行显示等其他操作。数据库的映射,插入等功能看此博客
  • 框架:数据模型使用QSqlTableModel,视图使用QTableView,表格的一些字体或者控件之类的使用QStyledItemDelegate实现。
    导航栏的变化实时的传回给表格,所有的数据库表都实现继承一个表格类,根据表格本身的特性可以设置自己的委托。数据库使用一个单列类进行管理,包括数据库的读取 ,创建,数据插入,以及对模型的映射等。

功能点

  1. 自选每页显示行数
  2. 跳转指定页面
  3. 上下翻页,最后/最前一页跳转
  4. 表格导出
  5. 表格查询

代码分析

导航栏
  • 该部分不复杂主要和tableView进行联动
    void PageNavigator::SetCurrentPage(int page)
    {if (m_curPage == page){return;}if (page < 1){page = 1;}if (page > (int)m_maxPage){page = m_maxPage;}m_curPage = page;ui->labelCurPage->setText(QString("第%1页/共%2页").arg(m_curPage).arg(m_maxPage));UpdateButtonState();emit SigCurrentPageChanged(m_curPage); // 通知 table 刷新
    }
    
表格更新视图
  • 每次使用过滤时要格外注意语句的条件
    void QTablePages::updateTableView()
    {if (!m_dataModel)return;if (m_filter != QString()) // 有过滤条件的情况{int offset = (m_currentPage - 1) * m_pageLines;// 使用正则表达式来匹配LIMIT和OFFSET后面的数字QRegExp limitRegex("LIMIT\\s*(\\d+)");QRegExp offsetRegex("OFFSET\\s*(\\d+)");// 替换LIMITm_filter.replace(limitRegex, QString("LIMIT %1").arg(m_pageLines));// 替换OFFSETm_filter.replace(offsetRegex, QString("OFFSET %1").arg(offset));m_dataModel->setFilter(m_filter);m_dataModel->select();return;}int offset = (m_currentPage - 1) * m_pageLines; // 计算偏移量 要减1,因为从0开始m_dataModel->setFilter(QString("1=1 ORDER BY time DESC LIMIT %1 OFFSET %2").arg(m_pageLines).arg(offset));m_dataModel->select();
    }
    
表格导出
  • 简单的导出为csv格式,要是为excel格式,则需要引入excel的库
void QTablePages::exportToCSV()
{if (!m_dataModel)return;QFileDialog dialog(this);dialog.setOptions(QFileDialog::DontUseNativeDialog);dialog.setWindowTitle(tr("表格导出"));dialog.setAcceptMode(QFileDialog::AcceptSave);dialog.setNameFilter(tr("CSV Files (*.csv)"));dialog.setStyleSheet("color: white;");QString saveFileName;if (dialog.exec()){saveFileName = dialog.selectedFiles().first();QFileInfo fileInfo(saveFileName);if (fileInfo.suffix().toLower() != "csv"){saveFileName += ".csv"; // 如果用户没有输入.csv,则添加它}}// 如果用户取消了操作,则返回if (saveFileName.isEmpty())return;// 打开一个文件用于写入QFile file(saveFileName);if (!file.open(QIODevice::WriteOnly | QIODevice::Text)){// 处理错误return;}/// 重置过滤条件-查询所有数据int offset = getOffest();int totalPages = getTotalPages();QString filter = getFilter();m_dataModel->setFilter(QString("1=1"));m_dataModel->select();QTextStream out(&file);int columnCount = m_dataModel->columnCount() - 1;// 写入列标题 操作列不写入for (int i = 1; i < columnCount; i++){out << m_dataModel->headerData(i, Qt::Horizontal).toString();if (i < columnCount - 1)out << ",";}out << "\n";// 写入数据auto formatDateTime = [](const QDateTime &dateTime){return dateTime.toString("yyyy-MM-dd HH:mm:ss");};for (int i = 0; i < m_dataModel->rowCount(); i++){QSqlRecord record = m_dataModel->record(i);for (int j = 1; j < columnCount; j++){QSqlField field = record.field(j);if (field.type() == QVariant::DateTime){// 如果字段是日期时间类型,则格式化输出QDateTime dateTime = field.value().toDateTime();out << formatDateTime(dateTime);}else{// 其他字段按原样输出out << field.value().toString();}if (j < columnCount - 1)out << ",";}out << "\n";}// 关闭文件file.close();// 恢复过滤条件if (filter != QString()){m_dataModel->setFilter(filter);}else{m_dataModel->setFilter(QString("1=1 ORDER BY time DESC LIMIT %1 OFFSET %2").arg(totalPages).arg(offset));}m_dataModel->select();
}
表格过滤
  • 数据过滤的条件,要和导航栏的偏移分开获取,不然过滤会出现问题
void QTablePages::refreshData(const QString &dateFrom, const QString &dateTo, const QString &content)
{if (m_dataModel == nullptr)return;QString filter;// 获取日期范围QString dateFilter = "time BETWEEN '" + dateFrom + "' AND '" + dateTo + "'";// 获取内容过滤条件QString contentFilter;if (!content.isEmpty()){contentFilter = "content LIKE '%" + content + "%'";}// 构建最终的过滤条件if (!filter.isEmpty()){if (!dateFilter.isEmpty()){filter += " AND " + dateFilter;}if (!contentFilter.isEmpty()){filter += " AND " + contentFilter;}}else{if (!dateFilter.isEmpty()){filter = dateFilter;if (!contentFilter.isEmpty()){filter += " AND " + contentFilter;}}else if (!contentFilter.isEmpty()){filter = contentFilter;}}// 重置导航条数据m_dataModel->setFilter(filter);m_dataModel->select();m_pageNavBar->updateNavbar(m_dataModel->rowCount(), m_pageLines);// 计算偏移量,要减1,因为从0开始int offset = (m_currentPage - 1) * m_pageLines;// 添加排序、限制和偏移量到过滤条件if (!filter.isEmpty()){filter += " ORDER BY time DESC LIMIT " + QString::number(m_pageLines) + " OFFSET " + QString::number(offset);}else{filter = "1=1 ORDER BY time DESC LIMIT " + QString::number(m_pageLines) + " OFFSET " + QString::number(offset);}m_filter = filter;// 应用最终的过滤条件m_dataModel->setFilter(filter);m_dataModel->select();
}

总结

  • 知识理应共享,源码在此
  • 导航栏,表格这些功能基本上都是单独封装好的,可以直接拿来用的
http://www.dt0577.cn/news/53942.html

相关文章:

  • 怎么把asp网站做的好看电商平台建设方案
  • 做阿里巴巴小企业网站搜索引擎优化排名工具
  • 南宁太阳能网站建设企业查询系统官网
  • 做商城网站需要在北京注册公司吗免费开源代码网站
  • 网站运营和维护关键词推广软件排名
  • 网站架构设计师是做什么的软文案例200字
  • 合肥网页模板建站网络seo公司
  • 新泰网站制作公司seo模拟点击算法
  • 如何选择品牌网站建设网络推广入门教程
  • 企业网站建设课件百度pc网页版登录入口
  • 网站建设策划书的编制惠州seo推广公司
  • 东营市两学一做考试网站今日国内热点新闻头条事件
  • java web网站开发结果百度认证官网申请
  • .red域名做网站好不好陕西网络推广公司
  • 学校网站建设汇报ppt刚开的店铺怎么做推广
  • 网站运营部门职责湖南网站seo公司
  • wamp可以做视频网站吗百度知道问答平台
  • 网站关键词布局百度一下马上知道
  • 合肥网站搭建工作室网上互联网推广
  • 网站模板源码平台沧州做网络推广的平台
  • 星子网优化内容
  • 做网站需学什么凡科网微信小程序
  • 招聘网站建设流程图windows优化大师好吗
  • 徐州市制作网站微信朋友圈推广文案
  • 房产信息网官网查询百度seo优化推广
  • linux类似wordpress合肥seo推广公司
  • 医学类的网站做Google在线外链推广
  • 邯郸企业网站团队常用的seo查询工具
  • php企业网站开发框架合肥关键词排名提升
  • 营销型网站建设网站建设营销如何交换优质友情链接