Qt使用XML设计多级关联菜单

在上一篇博客中,我们介绍了如何生成一个XML文件,今天我们利用生成的XML文件来进行解析并设计出多级关联菜单。在以前的文章中解决了如何生成二级菜单,不过之前的方法过于笨重,采用手动添加代码的方式,不仅代码重复率高而且不利于修改(维护)。所以,今天我们换用读XML的方式再次解决这个问题。

本打算采用model/view架构加下拉框列表设计为下拉表格的形式,但是遇到一个问题,下拉框的currentIndex始终无法正确的设置,它默认把表格的一行当成一个Item,所有当鼠标选择了table中的某一个数据时,comboBox的值始终是选中的数据所在行的第一列。晕,只好采用原始的下拉列表来做了。

效果图大致如下:我们先选择一个XML文件,这个XML文件就是我们前面一篇博客中生成的。此时,XML文件会被解析并将结果写入两个TXT文件中,在通过加载按钮将文件内容展示出来。这里我们使用了文件来做一次中转,实际上不用文件,也完全可以直接将XML的内容解析出来并展示,但是生成一个本地文件有个好处就是:我们不用每次打开程序都要去解析这个XMl文件,只要这个XML文件没有发生变化,我们就可以只解析一次,后面都直接读取文件即可。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

程序源代码:
ParseXML.h

#ifndef PARSEXML_H
#define PARSEXML_H

//#include "ComboBoxTableView.h"
#include "TableModel.h"
#include "TableView.h"

#include <QMainWindow>
#include <QList>
#include <QStringList>
#include <QDomElement>
#include <QTableWidget>
#include <QComboBox>

namespace Ui {
class ParseXML;
}

class ParseXML : public QMainWindow
{
    Q_OBJECT

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

    void ParseProvincesElement(const QDomElement &rootElement);
    void ParseCityElement(const QDomElement &element);
    void ParseDistrictElement(const QDomElement &element);

    void WriteFile(const QString &fileName, const QStringList &list);
    void WriteFile(const QString &fileName, const QList<QStringList> &list);

    void ReadFile();

//    void LoadCity();
//    void LoadDistrict();

    void LoadComboBox(QComboBox *comboBox, const QStringList &list);

private slots:
    void on_btn_choose_file_clicked();

    void on_btn_load_clicked();

    void currentIndexChanged_comboBox_1(const QString &text);

    void currentIndexChanged_comboBox_2(const QString &text);
private:
    Ui::ParseXML *ui;

    QStringList provincesList;
    QStringList cityList;
    QStringList districtList;

    QStringList stringList_p
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值