#include "datatypeconfigration.h" #include #include DataConfigration::DataConfigration(MapCore &core, std::shared_ptr target, QWidget *parent) : QWidget(parent), core_bind(core), target_bind(target), member_present(new QTableView(this)), member_model(new QStandardItemModel(this)), preview_present(new QTreeView(this)), preview_model(new QStandardItemModel(this)), append(new QPushButton("添加", this)), remove(new QPushButton("删除", this)) { auto layout = new QVBoxLayout(this); auto splitter = new QSplitter(this); layout->addWidget(splitter); auto widget = new QWidget(this); splitter->addWidget(widget); splitter->addWidget(preview_present); auto xlayout = new QVBoxLayout(widget); xlayout->addWidget(member_present); xlayout->addWidget(append); xlayout->addWidget(remove); member_present->setModel(member_model); preview_present->setModel(preview_model); xlayout->setMargin(2); layout->setMargin(2); xlayout->setSpacing(2); layout->setSpacing(2); this->member_model->setHorizontalHeaderLabels(QStringList() << "成员名称" << "成员类型"); this->preview_model->setHorizontalHeaderLabels(QStringList() << "成员名称" << "成员类型"); present_member(target); present_struct(target); connect(this->append, &QPushButton::clicked, [=](){ auto ninst = std::make_shared(std::make_shared()); auto target_x = target_bind->append(ninst); this->core_bind.refreshRoot(target_bind, target_x); this->target_bind = target_x; this->member_model->removeRows(0, member_model->rowCount()); this->preview_model->removeRows(0, preview_model->rowCount()); present_member(target_bind); present_struct(target_bind); }); } void DataConfigration::present_member(std::shared_ptr base) { auto list = base->members(); for(auto &d : list){ QList row; row << new QStandardItem(d->typePeer()->name()); row << new QStandardItem(d->typePeer()->type()); this->member_model->appendRow(row); } } void DataConfigration::present_struct(std::shared_ptr base, QStandardItem *target) { auto list = base->members(); for(auto &d : list){ QList row; row << new QStandardItem(d->typePeer()->name()); row << new QStandardItem(d->typePeer()->type()); if(!target) this->preview_model->appendRow(row); else target->appendRow(row); row.first()->setEditable(false); row.last()->setEditable(false); present_struct(d, row.first()); } }