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


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

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

    以下为代码:

    1. void MainWindow::ShowContent(QString FileName)
    2. {
    3. LoadXmlContent(FileName);
    4. ShowContentInView();
    5. }
    6. bool MainWindow::LoadXmlContent(QString FileName)
    7. {
    8. QString FilePath = "yourpath/" + FileName + ".xml";
    9. QFile file(FilePath); // 替换为您实际的文件路径
    10. if (!file.open(QIODevice::ReadOnly)) {
    11. qDebug() << "Can not open file。";
    12. return false;
    13. }
    14. QDomDocument document;
    15. if (!document.setContent(&file)) {
    16. qDebug() << "无法将文件解析为DOM树。";
    17. file.close();
    18. return false;
    19. }
    20. file.close();
    21. dataVector.clear();
    22. QDomElement root = document.firstChildElement(); // 获取根元素
    23. // 遍历所有子元素
    24. QDomNodeList elements = root.childNodes();
    25. for (int i = 0; i < elements.count(); i++) {
    26. QDomNode elementNode = elements.at(i);
    27. // 检查节点是否为元素。
    28. if (elementNode.isElement()) {
    29. QDomElement element = elementNode.toElement();
    30. QDomNodeList childNodes = element.childNodes();
    31. // 创建一个字典来存储键值对
    32. std::map dataMap;
    33. for (int j = 0; j < childNodes.count(); j++) {
    34. QDomNode childNode = childNodes.at(j);
    35. if (childNode.isElement()) {
    36. QDomElement childElement = childNode.toElement();
    37. QString key = childElement.nodeName();
    38. QString value = childElement.text();
    39. // 将键值对存入字典
    40. dataMap[key] = value;
    41. }
    42. }
    43. // 将字典存入vector
    44. dataVector.push_back(dataMap);
    45. }
    46. }
    47. // 打印存储的数据
    48. for (const auto& data : dataVector) {
    49. for (const auto& pair : data) {
    50. qDebug() << pair.first << ":" << pair.second;
    51. }
    52. qDebug() << "-------------------";
    53. }
    54. }
    55. void MainWindow::ShowContentInView()
    56. {
    57. m_model.clear();
    58. // 设置表头顺序
    59. QStringList headers = {"name", "len", "type", "value", "reverse", "factor", "isSelected", "dimension", "displaytext", "option", "showPercision"};
    60. m_model.setHorizontalHeaderLabels(headers);
    61. // 假设您已经有一个包含字典的vector
    62. //std::vector> dataVector;
    63. // 遍历vector中的每一项
    64. for (const auto &data : dataVector) {
    65. // 创建一个新的行
    66. QList rowItems;
    67. // 使用迭代器遍历字典中的键值对
    68. for (const QString &header : headers) {
    69. // 查找当前键
    70. auto it = data.find(header);
    71. if (it != data.end()) {
    72. QString value = it->second;
    73. rowItems.append(new QStandardItem(value));
    74. } else {
    75. // 如果键不存在,添加一个空单元格
    76. rowItems.append(new QStandardItem(""));
    77. }
    78. }
    79. // 将一行添加到模型
    80. m_model.appendRow(rowItems);
    81. }
    82. // 将模型与QTableView关联
    83. ui->tableView->setModel(&m_model);
    84. QHeaderView *headerView = ui->tableView->horizontalHeader();
    85. headerView->setSectionResizeMode(QHeaderView::ResizeToContents); // 根据内容调整列宽
    86. headerView->resizeSection(0, 100);
    87. // 显示窗口
    88. ui->tableView->show();
    89. }

  • 相关阅读:
    poshmark前景,怎么快速提升销量!
    java计算机毕业设计医院门诊预约系统源码+系统+mysql数据库+lw文档
    机器学习-模型评估
    Rust 力扣 - 1456. 定长子串中元音的最大数目
    vue路由及其页面
    【SA8295P 源码分析】87 - SA8295P HQNX + Android 编译环境搭建指导
    prometheus
    php 引用地址符&实现无限极分类
    【训练题71:动态规划】Building Blocks | Gym102822B
    均匀B样条曲线的表达式
  • 原文地址:https://blog.csdn.net/exlink2012/article/details/134297982