Qt设计XML生成器

最近也不知道出于什么样的想法,想自己做一个XML生成器,顾名思义,就是给一些输入,然后输出XML文件。断断续续捣鼓了数天,算是差不多了。基本思路是先获取用户输入生成一棵树,然后根据生成的数形成XML格式的文件。关于树控件编辑器,参考了Qt自带“编辑树窗口部件”,如下图展示。关于写XML文件,本设计采用DOM的方式,DOM 一次性读入整个 XML 文档,在内存中构造为一棵树(被称为 DOM 树...
摘要由CSDN通过智能技术生成

最近也不知道出于什么样的想法,想自己做一个XML生成器,顾名思义,就是给一些输入,然后输出XML文件。断断续续捣鼓了数天,算是差不多了。
基本思路是先获取用户输入生成一棵树,然后根据生成的数形成XML格式的文件。关于树控件编辑器,参考了Qt自带“编辑树窗口部件”,如下图展示。
在这里插入图片描述
关于写XML文件,本设计采用DOM的方式,DOM 一次性读入整个 XML 文档,在内存中构造为一棵树(被称为 DOM 树)。我们能够在这棵树上进行导航,比如移动到下一节点或者返回上一节点,也可以对这棵树进行修改,或者是直接将这颗树保存为硬盘上的一个 XML 文件。在 Qt 中,所有 DOM 节点的类型名字都以 QDom 开头,因此,QDomElement就是 Element 节点,QDomText就是 Text 节点。不同类型的节点则有不同类型的子节点。例如,Element 节点允许包含其它 Element 节点,也可以是其它类型。

程序运行效果图:
在这里插入图片描述在这里插入图片描述
生成的XML文件:
在这里插入图片描述
源代码:

#ifndef XMLGENERATOR_H
#define XMLGENERATOR_H

#include <QMainWindow>
#include <QTreeWidgetItem>
#include <QEvent>
#include <QDomDocument>

namespace Ui {
class XmlGenerator;
}

class XmlGenerator : public QMainWindow
{
    Q_OBJECT

public:
    explicit XmlGenerator(QWidget *parent = 0);
    ~XmlGenerator();

    void InitUi();
    bool GenerateXML();

protected:
     bool eventFilter(QObject *obj, QEvent *event);

private slots:
    void CurrentItemChangedSlot(QTreeWidgetItem *current);

    void on_btn_addItem_clicked();

    void on_btn_addChildItem_clicked();

    void on_btn_delItem_clicked();

    void on_btn_GenerateXML_clicked();



    void on_btn_up_clicked();

    void on_btn_down_clicked();

    void on_btn_changeToFather_clicked();

    void on_btn_changeToChild_clicked();

private:
    Ui::XmlGenerator *ui;
    QTreeWidgetItem *rootItem;
    QDomDocument doc;
};

#endif // XMLGENERATOR_H

#include "XmlGenerator.h"
#include "ui_xmlgenerator.h"

#include <QDebug>
#include <QDomText>
#include <QDomElement>
#include <QFileDialog>
#include <QMessageBox>

XmlGenerator::XmlGenerator(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::XmlGenerator)
{
    ui->setupUi(this);

    InitUi();

    rootItem = new QTreeWidgetItem;

    connect(ui->treeWidget, &QTreeWidget::currentItemChanged, this, &XmlGenerator::CurrentItemChangedSlot);
}

XmlGenerator::~XmlGenerator()
{
    delete ui;
}

void XmlGenerator::InitUi()
{
    /*如果采用设置样式表的方式给按钮添加图片,则按钮的形态会消失,比如,按钮没有边框
    ui->btn_addItem->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/image/添加1.png);}"
                                "QPushButton:hover{border-image: url(:/new/prefix1/image/添加2.png);}");
    ui->btn_addChildItem->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/image/添加子项1.png);}"
                                 "QPushButton:hover{border-image: url(:/new/prefix1/image/添加子项2.png);}");
    ui->btn_delItem->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/image/减号1.png);}"
                                "QPushButton:hover{border-image: url(:/new/prefix1/image/减号2.png);}");
    ui->btn_up->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/image/上1.png);}"
                                 "QPushButton:hover{border-image: url(:/new/prefix1/image/上2.png);}");
    ui->btn_down->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/image/下1.png);}"
                                "QPushButton:hover{border-image: url(:/new/prefix1/image/下2.png);}");
    ui-&g
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值