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

Qt读取xml文件并把内容显示到QTableview上

本例子中把xml文件作为数据库表。

xml文件名作为函数参数,把不同的xml文件名传入函数,会显示不同的文件内容。

以下为代码:

void MainWindow::ShowContent(QString FileName)
{LoadXmlContent(FileName);ShowContentInView();}bool MainWindow::LoadXmlContent(QString FileName)
{QString FilePath = "yourpath/" + FileName + ".xml";QFile file(FilePath); // 替换为您实际的文件路径if (!file.open(QIODevice::ReadOnly)) {qDebug() << "Can not open file。";return false;}QDomDocument document;if (!document.setContent(&file)) {qDebug() << "无法将文件解析为DOM树。";file.close();return false;}file.close();dataVector.clear();QDomElement root = document.firstChildElement(); // 获取根元素// 遍历所有子元素QDomNodeList elements = root.childNodes();for (int i = 0; i < elements.count(); i++) {QDomNode elementNode = elements.at(i);// 检查节点是否为元素。if (elementNode.isElement()) {QDomElement element = elementNode.toElement();QDomNodeList childNodes = element.childNodes();// 创建一个字典来存储键值对std::map<QString, QString> dataMap;for (int j = 0; j < childNodes.count(); j++) {QDomNode childNode = childNodes.at(j);if (childNode.isElement()) {QDomElement childElement = childNode.toElement();QString key = childElement.nodeName();QString value = childElement.text();// 将键值对存入字典dataMap[key] = value;}}// 将字典存入vectordataVector.push_back(dataMap);}}// 打印存储的数据for (const auto& data : dataVector) {for (const auto& pair : data) {qDebug() << pair.first << ":" << pair.second;}qDebug() << "-------------------";}
}void MainWindow::ShowContentInView()
{m_model.clear();// 设置表头顺序QStringList headers = {"name", "len", "type", "value", "reverse", "factor", "isSelected", "dimension", "displaytext", "option", "showPercision"};m_model.setHorizontalHeaderLabels(headers);// 假设您已经有一个包含字典的vector//std::vector<std::map<QString, QString>> dataVector;// 遍历vector中的每一项for (const auto &data : dataVector) {// 创建一个新的行QList<QStandardItem *> rowItems;// 使用迭代器遍历字典中的键值对for (const QString &header : headers) {// 查找当前键auto it = data.find(header);if (it != data.end()) {QString value = it->second;rowItems.append(new QStandardItem(value));} else {// 如果键不存在,添加一个空单元格rowItems.append(new QStandardItem(""));}}// 将一行添加到模型m_model.appendRow(rowItems);}// 将模型与QTableView关联ui->tableView->setModel(&m_model);QHeaderView *headerView = ui->tableView->horizontalHeader();headerView->setSectionResizeMode(QHeaderView::ResizeToContents); // 根据内容调整列宽headerView->resizeSection(0, 100);// 显示窗口ui->tableView->show();}

http://www.lryc.cn/news/224424.html

相关文章:

  • xv6-x86在ubuntu14.04 i386下正常编译、调试,在ubuntu23.04下编译各种报错--google镜像
  • 关于unity中 编辑器相关逻辑的记录
  • linux安装配置MongoDB并设置开机启动
  • 1366 - Incorrect string value: ‘\xE5\xB9\xBF\xE5\x85\xB0...‘ for column编码错误
  • K8S篇之谈谈kubelet的上报机制
  • 混沌系统在图像加密中的应用(小波混沌神经网络)
  • Node.js中的文件系统(file system)模块
  • react组件间通信之context
  • 京东数据分析:2023年10月京东洗衣机行业品牌销售排行榜
  • QQ恢复聊天记录,就用这3个方法!
  • 高能数造电池3D打印智能制造小试线,开启全固态电池数字化新时代
  • stable diffusion为什么能用于文本到图像的生成
  • c语言刷题第10周(16~20)
  • Vue.js 响应式系统深度剖析
  • LabVIEW如何才能得到共享变量的引用
  • 界面控件DevExtreme图表和仪表(v23.1) - 新功能(Angular,React,Vue,jQuery)
  • Rust和isahc库编写代码示例
  • Win10笔记本开热点后电脑断网的解决方法
  • 跨链知识指南
  • 字符编码转换时发生内存越界引发的摄像头切换失败问题的排查
  • git修改之前的commit提交的作者信息和邮箱信息
  • 《视觉SLAM十四讲》-- 相机与图像
  • 欧科云链:成本与规模之辨——合规科技如何赋能香港Web3生态?
  • 【文献分享】NASA JPL团队CoSTAR一大力作:直接激光雷达里程计:利用密集点云快速定位
  • SPASS-探索性分析
  • 电子印章怎么弄?三步教你电子印章在线生成免费教程!
  • 以技术创新引领行业发展,飞凌嵌入式获双项省级荣誉
  • 在Google Kubernetes集群创建分布式Jenkins(二)
  • GEE:GEE中调用 Math.js 教程
  • 迅为龙芯3A5000主板,支持PCIE 3.0、USB 3.0和 SATA 3.0显示接口2 路、HDMI 和1路 VGA,可直连显示器