我应该如何存储进入TreeView的数据?字典(QHash
)?纯文本? JSON?
我的层次结构类似于:
{
'Cloth': {
'Tissue':None,
'Leather': {
'Bandage': None
}
},
'Smoke': {
'White':{
'Smallscale': None,
'Largescale':None
}
}
}
操作
当我单击一个leaf-Element时,它将检索Fullpath,如" Smoke / White / Smallscale" ,这将用作放置SQL查询的键
我会为每个条目使用 QStandardItem ,点击后,我会递归调用他们的父母,直到我点击root。
有什么想法吗?
答案 0 :(得分:0)
您知道QJsonTreeWidget吗?
当然你不需要使用那个库,但我认为你应该在任何情况下使用JSON。它现在几乎是一个标准,在我们使用树木时非常有用。
Boost还有一个很棒的库,可以与JSON一起使用。
答案 1 :(得分:0)
您可以使用其中一个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();
}