#include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> #include <QFile> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); jsonModel = new JsonTreeModel(this); ui->treeView->setModel(jsonModel); initLoadDump(); initEdit(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initLoadDump() { //选择导入的文件路径 connect(ui->btnLoadPath,&QPushButton::clicked,this,[this](){ const QString jsonpath = QFileDialog::getOpenFileName(this,"File Path"); if(jsonpath.isEmpty()) return; ui->editLoadPath->setText(jsonpath); }); //导入Json文件 connect(ui->btnLoadJson,&QPushButton::clicked,this,[this](){ const QString loadpath = ui->editLoadPath->text(); if(loadpath.isEmpty()) return; //parseJson.loadJson(loadpath); jsonModel->loadJson(loadpath); ui->treeView->expandAll(); }); //选择导出的文件路径 connect(ui->btnDumpPath,&QPushButton::clicked,this,[this](){ const QString jsonpath = QFileDialog::getSaveFileName(this,"Save Path"); if(jsonpath.isEmpty()) return; ui->editDumpPath->setText(jsonpath); }); //导出Json文件 connect(ui->btnDumpJson,&QPushButton::clicked,this,[this](){ const QString dumppath = ui->editDumpPath->text(); if(dumppath.isEmpty()) return; //parseJson.dumpJson(dumppath); jsonModel->dumpJson(dumppath); }); } void MainWindow::initEdit() { //增删部分参照示例:editable tree // //我的item默认为enum:none,但目前还没有delegate来自定义操作 //只在item的appendchilren里测试性的改成了enum:value //添加节点 connect(ui->btnInsert,&QPushButton::clicked,this,[this](){ QModelIndex index = ui->treeView->selectionModel()->currentIndex(); if(!index.isValid()) return; QAbstractItemModel *model = ui->treeView->model(); if(!model->insertRow(index.row()+1,index.parent())) return; updateIndex(); //修改insert的内容 /*for (int column = 0; column < model->columnCount(index.parent()); ++column) { QModelIndex child = model->index(index.row()+1, column, index.parent()); model->setData(child, QVariant("[No data]"), Qt::EditRole); }*/ }); //添加子节点 connect(ui->btnInsertChild,&QPushButton::clicked,this,[this](){ QModelIndex index = ui->treeView->selectionModel()->currentIndex(); QAbstractItemModel *model = ui->treeView->model(); if (model->columnCount(index) == 0) { if (!model->insertColumn(0, index)) return; } if (!model->insertRow(0, index)) return; //修改insert的内容 /*for (int column = 0; column < model->columnCount(index); ++column) { QModelIndex child = model->index(0, column, index); model->setData(child, QVariant("[No data]"), Qt::EditRole); }*/ ui->treeView->selectionModel()->setCurrentIndex(model->index(0, 0, index), QItemSelectionModel::ClearAndSelect); updateIndex(); }); //删除节点树 connect(ui->btnRemove,&QPushButton::clicked,this,[this](){ QModelIndex index = ui->treeView->selectionModel()->currentIndex(); QAbstractItemModel *model = ui->treeView->model(); if (model->removeRow(index.row(), index.parent())) updateIndex(); }); } void MainWindow::updateIndex() { //抄的示例 //bool hasSelection = !ui->treeView->selectionModel()->selection().isEmpty(); //removeRowAction->setEnabled(hasSelection); //removeColumnAction->setEnabled(hasSelection); bool hasCurrent = ui->treeView->selectionModel()->currentIndex().isValid(); //insertRowAction->setEnabled(hasCurrent); //insertColumnAction->setEnabled(hasCurrent); if (hasCurrent) { ui->treeView->closePersistentEditor(ui->treeView->selectionModel()->currentIndex()); int row = ui->treeView->selectionModel()->currentIndex().row(); int column = ui->treeView->selectionModel()->currentIndex().column(); if (ui->treeView->selectionModel()->currentIndex().parent().isValid()) qDebug()<<tr("Position: (%1,%2)").arg(row).arg(column); else qDebug()<<tr("Position: (%1,%2) in top level").arg(row).arg(column); } }