在数据结构Qt中存储目录层次结构

Storing Directory hierarchy in Datastructure Qt

本文关键字:层次结构 存储 数据结构 Qt      更新时间:2023-10-16

我应该如何存储进入TreeView的数据?一本字典(QHash)?纯文本吗?JSON吗?

My Hierarchy应该是这样的:

{
    'Cloth': {
        'Tissue':None,
        'Leather': {
            'Bandage': None
        }
        },
    'Smoke': {
        'White':{
            'Smallscale': None,
            'Largescale':None
        }
    }
}

动作:

当我点击一个叶子元素时,它将检索完整路径,如"Smoke/White/Smallscale",这将用作放置sql查询的键。

我将对每个条目使用QStandardItem,当单击时,我将递归地调用它们的父项,直到我点击根。

任何想法吗?

你知道QJsonTreeWidget吗?

当然你不需要使用那个库,但我确实认为你应该在任何情况下使用JSON。现在它几乎是一个标准,当我们处理树的时候非常有用。

Boost还有一个很棒的库来处理JSON。

您可以使用json库之一(如cajun)来解析json文件

这是Qt部分:

#include <QtGui>
#include <QTreeView>
class SimpleTreeView :public QTreeView
{
    Q_OBJECT
public:
        SimpleTreeView(QWidget *parent = 0);
public slots:
    void slot_item_clicked(const QModelIndex &idx);
private:
         QStandardItemModel *model;
};
#include <simpletreeview.h>
#include <qmessagebox.h>
#include <qobject.h>
SimpleTreeView::SimpleTreeView(QWidget *parent) : QTreeView(parent)
{
        model = new QStandardItemModel(2,1);
        QStandardItem *item1 = new QStandardItem("Cloth");
        QStandardItem *item2 = new QStandardItem("Smoke");
        model->setItem(0, 0, item1);
        model->setItem(1, 0, item2);
        QStandardItem *item3 = new QStandardItem("White");
        item2->appendRow(item3);
        QStandardItem *leaf = new QStandardItem("Smallscale");
        leaf->setData("Smoke/White/Smallscale");
        item3->appendRow(leaf);
        setModel(model);
        connect(this, SIGNAL(clicked(const QModelIndex &)), this, SLOT(slot_item_clicked(const QModelIndex &)));
}
void SimpleTreeView::slot_item_clicked(const QModelIndex & idx)
{
    QString strData = model->itemFromIndex(idx)->data().toString();
    QMessageBox::information(NULL, "Title", strData, QMessageBox::Yes, QMessageBox::Yes);
}
// main.cpp
#include <QApplication>
#include <simpletreeview.h>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    SimpleTreeView view;
    view.show();
    return app.exec();
}