QT解析xml文件

这篇具有很好参考价值的文章主要介绍了QT解析xml文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mainwindow.cpp 

#include "mainwindow.h"
#include "QTreeWidgetItem"
#include "ui_mainwindow.h"
#include <QDomDocument>
#include <QFile>
#include <QtDebug>
MainWindow::MainWindow(QWidget* parent)
    : QMainWindow(parent)
//    ,
//    ui(new Ui::MainWindow)
{
    //    ui->setupUi(this);
    setupUi(this);
    initTable();
    initTree();
    setStyle();
    xmlAnalysis();
}

MainWindow::~MainWindow()
{
    //    delete ui;
}

void MainWindow::ShowPointDetail(int r, int c)
{
    qDebug() << r << c;
}

void MainWindow::initTable()
{
    connect(tableWidget, &QTableWidget::cellDoubleClicked, this, &MainWindow::ShowPointDetail);
    tableWidget->setRowCount(5);
    tableWidget->setColumnCount(5);
    QTableWidgetItem* item;
    qDebug() << tableWidget->rowCount();
    qDebug() << tableWidget->columnCount();
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            item = new QTableWidgetItem(QString::number(j + 1));
            tableWidget->setItem(j, 0, item);

            qDebug() << "ces";

            item = new QTableWidgetItem("12000");
            tableWidget->setItem(j, 1, item);
        }
    }
    //    tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);
    tableWidget->horizontalHeader()->setStretchLastSection(true);
    tableWidget->horizontalHeader()->setMinimumHeight(40);
    tableWidget->horizontalHeader()->setFont(QFont("song", 12));
    treeWidget->setColumnCount(12);
    qDebug() << treeWidget->columnCount();
}

void MainWindow::initTree()
{
    //    QTreeWidgetItem* tree = new QTreeWidgetItem(treeWidget,"test");
    QTreeWidgetItem* typeItem = new QTreeWidgetItem(treeWidget, QStringList(QString("test ")));
    typeItem->setText(1, "01");
    QTreeWidgetItem* typeItem1 = new QTreeWidgetItem(treeWidget, QStringList(QString("test1 ")));
    typeItem1->setText(2, "011");
    QTreeWidgetItem* typeItem2 = new QTreeWidgetItem(typeItem1, QStringList(QString("test12 ")));
    typeItem2->setText(1, "0112");
    treeWidget->addTopLevelItem(typeItem);
}
void MainWindow::xmlAnalysis()
{
    QFile f("D:\\naru\\baogao\\STAT_01_20230608_170625_552.xml");
    if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << tr("open error");
        return;
    }
    //    QByteArray arr = f.readAll();
    //    qDebug() << arr;
    qDebug() << "anasysis STA01";
    qDebug() << f.fileName() << f.fileName().toLocal8Bit().data();
    qDebug() << f.fileName().toUtf8().data();
    QString errStr;
    int errLine;
    int errColoum;
    QDomDocument doc;
    if (!doc.setContent(&f, false, &errStr, &errLine, &errColoum)) {
        qPrintable("Error:Parser er");
        qPrintable(errStr);
    }

    QDomElement root = doc.documentElement();
    qDebug() << root.tagName().toUtf8().data();
    qDebug() << root.attribute("type") << root.attribute("desc");
    QDomNodeList query_node = root.elementsByTagName("QueryTime");
    qDebug() << query_node.count() << query_node.isEmpty() << query_node.size() << query_node.length();

    if (query_node.count() == 1) {
        //查询节点1
        QDomNode m = query_node.item(0);
        qDebug() << m.toElement().attribute("start");
        //警告节点

        QDomNodeList warn_node = m.toElement().elementsByTagName("Warning");
        qDebug() << "warning size = " << warn_node.count();
        for (int i = 0; i < warn_node.count(); i++) {
            qDebug() << warn_node.at(i).toElement().attribute("type"); //获取属性
            qDebug() << warn_node.at(i).toElement().attribute("time");
            // led节点

            QDomNodeList led_node = warn_node.item(i).toElement().elementsByTagName("IED"); //在当前节点获取下面的节点
            qDebug() << "led_node.count()" << led_node.count();
            for (int i = 0; i < led_node.count(); i++) {
                IED01 ied;
                led_node.item(i).toElement().attribute("name");
                ied.desc = led_node.item(i).toElement().attribute("desc");
                // point
                QDomNodeList point_node = led_node.item(i).toElement().elementsByTagName("Point"); //解析Point节点
                for (int i = 0; i < point_node.count(); i++) {
                    Point01 point;
                    point.path = point_node.item(i).toElement().attribute("path");
                    point.desc = point_node.item(i).toElement().attribute("desc");
                    point.other = point_node.item(i).toElement().attribute("other");
                    point.value = point_node.item(i).toElement().attribute("Value");
                    point.time = point_node.item(i).toElement().attribute("Time");
                    point.quality = point_node.item(i).toElement().attribute("Quality");
                    qDebug() << point.path;
                }
            }
            // Locations节点

            QDomNodeList loca_node = warn_node.item(i).toElement().elementsByTagName("Locations"); //解析Location节点
            qDebug() << "loca_node.count()" << loca_node.count();
            // location下的子节点
            QDomNodeList Ied_node = loca_node.at(0).toElement().elementsByTagName("Ied");
            qDebug() << "Ied_node.iedDesc()" << Ied_node.item(0).toElement().attribute("iedDesc");

            qDebug() << "Ied_node.count()" << Ied_node.count();

            // effect节点
            QDomNodeList effe_node = warn_node.item(i).toElement().elementsByTagName("Effects"); //解析Effects节点
            qDebug() << "effe_node.count()" << effe_node.count();

            qDebug() << effe_node.item(0).toElement().attribute("desc");
            //<Suggestions>
            QDomNodeList sugg_node = warn_node.item(i).toElement().elementsByTagName("Suggestions"); //解析Effects节点
            qDebug() << "sugg_node.count()" << sugg_node.count();

            qDebug() << sugg_node.item(0).toElement().attribute("desc");
        }

    } else {
        qDebug() << "QueryTime error";
    }
}

void MainWindow::setStyle()
{
    //    menufsda->setStyleSheet("background-color:red;");
    //    QMenuBar* bar = menuBar();
    //    bar->setStyleSheet("background-color:red;");
    setStyleSheet("QMenuBar{background-color: "
                  "qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, "
                  "stop:0 rgba(11, 126, 123, 255), "
                  "stop:1 rgba(25, 152, 149, 255));}"); // width:1920px;height:36px;
}

mainwindow.h文章来源地址https://www.toymoban.com/news/detail-628523.html

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

//#include "D:\\naru\\baogao\\relay_diagnose_lib\\relay_diagnose_struct.h"
#include "ui_mainwindow.h"
#include <QMainWindow>
// namespace Ui {
// class MainWindow;
// }
//二次回路故障诊断 STAT_01 start
struct Point01 {
    QString path;
    QString desc;
    QString other;
    QString value;
    QString time;
    QString quality;
};

struct Cable {
    QString id;
    QString startIedName;
    QString startIedDesc;
    QString endIedName;
    QString endIedDesc;
    QString cableLen;
    QString resultId;
    QString priority;
};

struct Port {
    QString id;
    QString iedName;
    QString iedDesc;
    QString plug;
    QString resultId;
    QString priority;
};

struct Slot {
    QString id;
    QString iedName;
    QString iedDesc;
    QString resultId;
    QString priority;
};

struct Ied01 {
    QString iedName;
    QString iedDesc;
    QString resultId;
    QString priority;
};

struct Locations {
    QVector<Ied01> vec_Ied;
    QVector<Slot> vec_Slot;
    QVector<Port> vec_Port;
    QVector<Cable> vec_Cable;
};

struct IED01 {
    QString name;
    QString desc;
    QVector<Point01> vec_point;
};

struct Effects {
    QString desc;
    QString resultId;
    QString priority;
};

struct Suggestions {
    QString desc;
    QString resultId;
    QString priority;
};
struct Warning01 {
    QString type;
    QString time;
    QVector<IED01> vec_ied;
    Locations locations;
    QVector<Effects> vec_effect;
    QVector<Suggestions> vec_sugg;
};

struct QueryTime01 {
    QString start;
    QString end;
    QVector<Warning01> vec_warning;
};

struct STAT01 {
    QString type;
    QString desc;
    QueryTime01 query_time;
};

//二次回路故障诊断 STAT_01 end

class MainWindow : public QMainWindow, public Ui::MainWindow {
    Q_OBJECT

public:
    explicit MainWindow(QWidget* parent = NULL);
    ~MainWindow();
public slots:
    void ShowPointDetail(int r, int c);

private:
    //    Ui::MainWindow *ui;
    void initTable();
    void initTree();
    void setStyle();
    void xmlAnalysis();
};

#endif // MAINWINDOW_H

到了这里,关于QT解析xml文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt xml解析之QXmlStreamReader

    项目中遇到需要解析某个方法返回的xml字符串,奈何C/C++中没有原生的方法可供调用,只能使用第三方库,搜了一圈资料发现都不好用。刚好项目中用的Qt,瞬间想到了Qt中提供的各种各样的函数,去仔细查了一下Qt中提供的函数——QXmlStreamReader,真救命稻草,几行代码就搞定

    2024年02月10日
    浏览(40)
  • C++QT开发——Xml、Json解析

    可扩展标记语言,标准通用标记语言(Extensible Markup Language)的子集,简称XML,是一种定义电子文档结构和描述其内容的国际标准语言,被设计用来传输和存储数据。 可扩展标记语言与Access],Oracle]和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:

    2024年02月06日
    浏览(43)
  • qt读写xml文件

    Qt使用XML模块,在.pro文件中添加 QT += xml Qt 提供了三种读 写  XML 文档的方法: QXmlStreamReader / QXmlStreamWriter: 一种快速的基于流的方式访问良格式 XML 文档 , 特别适合于实现一次解析器(所谓“一次解析器”,可以理解成我们只需读取文档一次,然后像一个遍历器从头到尾一

    2024年02月11日
    浏览(39)
  • 利用Qt输出XML文件

    使用Qt输出xml文件 写入生成的xml文件如下:

    2024年02月02日
    浏览(47)
  • qt xml文件写入读取

    ****************************************************************************** QT       += core gui xml ****************************************************************************** #include \\\"mainwindow.h\\\" #include QDomDocument #include QTextStream #include QFile #include QDebug MainWindow::MainWindow(QWidget *parent)     : QMainWindow(parent) {    

    2024年02月09日
    浏览(37)
  • Qt XML文件读、写、修改

    1.1 使用的库 1.2 主体语句 头部创建: 内容创建: 1.3 详细例子说明 .cpp文件

    2024年02月11日
    浏览(39)
  • Qt读写ini配置文件(QSettings)、XML

    1、ini相关的 总结:Qt读写ini配置文件(QSettings) - 布丁Plus - 博客园 (cnblogs.com) Qt读写ini文件(含源码+注释)_qt ini文件读写_lw向北.的博客-CSDN博客 2、XML相关的 Qt读写XML文件(含源码+注释)_qt写xml_lw向北.的博客-CSDN博客

    2024年02月11日
    浏览(49)
  • qt:通过命令压缩zip文件

    zip -j 的-j表示不含路径 stat 判断文件大小

    2024年02月16日
    浏览(43)
  • QT 简单实现自动更新程序(一) 效果展示 功能描述 ftp模式 http模式 配置文件更新 安装包更新

      该系列文章主要讲解自动更新程序相关,会从自动更新原理开始,到ftp与http不同下载方式,再到到如何实现配置文件更新与安装包更新,最后做成一个完整的软件。只是经验分享,描述内容并不绝对,如有误差欢迎指正。以ftp下载,配置文件更新模式为例,实现效果如下

    2024年02月10日
    浏览(53)
  • Qt Xml的读、写、修改、删除

    Xml文件的创建、读取、修改、删除以下图格式为例。 //! 1. //! 2.添加头文件 //! ?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"? //! 3.添加根节点(根节点只能有一个,子节点和子节点的子节点个数不限) //! library /library //! 4.节点root添加子节点 //! //! //! QDomElement book=doc.createElement(“book”); //! 将子节

    2024年02月10日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包