#include "mainwindow.h" #include "ui_mainwindow.h" #include "basicproperty.h" #include "changenamedialog.h" #include "collectionwindow.h" #include "statusconfiguration.h" #include "containerpool.h" #include "resfiledialog.h" #include #include #include #include #include #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QPixmap pix("/Users/menglanluo/pic.png"); ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio)); this->setAcceptDrops(true); ui->tableWidget_animation->setHorizontalHeaderLabels({"名称","资源","时间线","z-Order"}); ui->tableWidget_containerPool->setHorizontalHeaderLabels({"键值","资源名","初始时间线","点击时间线","影响时间线","消失时间线","消失z-Order"}); ui->tableWidget_childElem->setHorizontalHeaderLabels({"名称","使用的池子"}); ui->tableWidget_event->setHorizontalHeaderLabels({"事件名称","是否需要颜色一致","状态变化幅度","特效","根据格子数量消除","触发动作"}); ui->tabWidget->setCurrentIndex(0); ui->lineEdit_collectionType->setReadOnly(true); } MainWindow::~MainWindow() { delete ui; } ///创建一个时间线下拉选项 QComboBox* MainWindow::createTimelineBox(QString chosenTimeline,QString fileName,TimelineType type) { ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QComboBox* timeLine = new QComboBox; if(fileName == "双击添加资源文件") return timeLine; timeLine->addItems(elem->getTimelineList(fileName)); int index; if(chosenTimeline.isEmpty()) index = -1; else index= timeLine->findText(chosenTimeline); timeLine->setCurrentIndex(index); if(type == TimelineType::Animation){ connect(timeLine,SIGNAL(currentTextChanged(QString)),this,SLOT(onTimelineTextChanged(QString))); } else if(type == TimelineType::Pool){ connect(timeLine,SIGNAL(currentTextChanged(QString)),this,SLOT(onPoolTimelineTextChanged(QString))); } return timeLine; } ///创建一个使用池子下拉选项 QComboBox* MainWindow::createPoolBox(QString chosenPool) { ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QComboBox* pools = new QComboBox; pools->addItem("尚未选择池子"); for(const auto &i:elem->container){ pools->addItem(i.poolName); } int index; if(chosenPool == "尚未选择池子") index = 0; else index= pools->findText(chosenPool); pools->setCurrentIndex(index); connect(pools,SIGNAL(currentTextChanged(QString)),this,SLOT(onPoolsTextChanged(QString))); return pools; } ///创建一个checkBox QCheckBox* MainWindow::createCheckBox(bool chosen) { QCheckBox* check = new QCheckBox; if(chosen) check->setCheckState(Qt::Checked); else check->setCheckState(Qt::Unchecked); connect(check,SIGNAL(stateChanged(int)),this,SLOT(onCheckBoxStateChanged(int))); return check; } ///创建一个特效下拉选项 QComboBox* MainWindow::createEffectBox(QString chosenEffect) { ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QComboBox* effect = new QComboBox; effect->addItem("尚未选择动画"); for(const auto &i:elem->statusEffect){ effect->addItem(i.name); } int index; if(chosenEffect == "尚未选择动画") index = 0; else index= effect->findText(chosenEffect); effect->setCurrentIndex(index); connect(effect,SIGNAL(currentTextChanged(QString)),this,SLOT(onEffectTextChanged(QString))); return effect; } ///创建一个触发动作 QWidget* MainWindow::createTriggerAction() { QComboBox* actions = new QComboBox; QPushButton* setAction = new QPushButton("设置"); QHBoxLayout *layout = new QHBoxLayout(); QWidget *triggerAction = new QWidget; layout->addWidget(actions); layout->addWidget(setAction); triggerAction->setLayout(layout); layout->setMargin(0); return triggerAction; } ///动画删除或改名后其它下拉选项的更新 void MainWindow::updateAnimComboBox(QString changedAnim) { ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; //收集动画界面 if(ui->listWidget_collectAnim->currentItem() != nullptr){ int index = elem->getCollAnimIndex(ui->listWidget_collectAnim->currentItem()->text()); if(elem->collAnim[index].anim == changedAnim) ui->comboBox_animation->setCurrentIndex(0); } //状态配置界面 if(ui->listWidget_status->currentItem() != nullptr){ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); if(elem->statusConfig[index].initAnim == changedAnim) ui->comboBox_initAnim->setCurrentIndex(0); if(elem->statusConfig[index].clickAnim == changedAnim) ui->comboBox_clickAnim->setCurrentIndex(0); int rowNum = ui->tableWidget_event->rowCount(); for(int i=0;i(ui->tableWidget_event->cellWidget(i,3)); if(effect->currentText() == changedAnim) effect->setCurrentIndex(0); } } } ///收集动画删除或改名后下拉选项更新 void MainWindow::updateCollAnimComboBox(QString changedAnim) { std::cout<<"收集动画改变,更新下拉选项"<listWidget_elem->currentItem()->text()]; //状态配置界面 if(ui->listWidget_status->currentItem() != nullptr){ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); if(elem->statusConfig[index].collAnim == changedAnim) ui->comboBox_collectAnimation->setCurrentIndex(0); } } //TODO: 设置ui所有数据 void MainWindow::setUi(ElemPropertyData *elem) { std::cout<<"切换元素,刷新界面"<iconPath); ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio)); ui->lineEdit_name->setText(elem->labelName); ui->lineEdit_size->setText(elem->size); ui->lineEdit_maxlayer->setText(elem->maxLayer); ui->lineEdit_score->setText(elem->score); ui->spinBox_drop->setValue(elem->dropConfig); //设置状态与效果动画表格显示 int rowCnt = ui->tableWidget_animation->rowCount(); for(int i=0;itableWidget_animation->removeRow(0); } for(const auto &i:elem->statusEffect){ int rowNum = ui->tableWidget_animation->rowCount(); ui->tableWidget_animation->insertRow(rowNum); ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(i.name)); QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res)); // 此单元格不可编辑 res->setFlags(res->flags() & ~Qt::ItemIsEditable); ui->tableWidget_animation->setItem(rowNum,1,res); //设置时间线 QComboBox* timeline = createTimelineBox(i.timeline,i.res,TimelineType::Animation); ui->tableWidget_animation->setCellWidget(rowNum,2,timeline); ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem(i.zOrder)); } //设置收集动画的显示并聚焦到收集动画列表的最后一个元素 ui->listWidget_collectAnim->clear(); for(const auto &i:elem->collAnim){ ui->listWidget_collectAnim->addItem(i.name); } // ui->listWidget_collectAnim->item(0)->setSelected(true); // 设置选中 //设置状态配置界面 ui->listWidget_status->clear(); for(const auto &i:elem->statusConfig){ ui->listWidget_status->addItem(i.statusValue); } //设置收集动画和状态配置的comboBox ui->comboBox_initAnim->clear(); ui->comboBox_clickAnim->clear(); ui->comboBox_collectAnimation->clear(); ui->comboBox_animation->clear(); ui->comboBox_initAnim->addItem("尚未选择动画"); ui->comboBox_clickAnim->addItem("尚未选择动画"); ui->comboBox_collectAnimation->addItem("尚未选择动画"); ui->comboBox_animation->addItem("尚未选择动画"); for(const auto &i:elem->statusEffect){ ui->comboBox_clickAnim->addItem(i.name); ui->comboBox_animation->addItem(i.name); ui->comboBox_initAnim->addItem(i.name); } for(const auto &i:elem->collAnim){ ui->comboBox_collectAnimation->addItem(i.name); } //设置容器池界面 ui->listWidget_pool->clear(); for(const auto &i:elem->container){ ui->listWidget_pool->addItem(i.poolName); } //切换元素时容器尚未选中,先清除表格内容 int rowNum = ui->tableWidget_containerPool->rowCount(); for(int i=0;itableWidget_containerPool->removeRow(0); } //设置子元素界面 rowCnt = ui->tableWidget_childElem->rowCount(); for(int i=0;itableWidget_childElem->removeRow(0); } for(const auto &i:elem->childElem){ int rowNum = ui->tableWidget_childElem->rowCount(); ui->tableWidget_childElem->insertRow(rowNum); ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(i.name)); //TODO: 根据记载的comboBox数据设置当前选中项 QComboBox* containers = new QComboBox; for(const auto &i:elem->container){ containers->addItem(i.poolName); } int index = containers->findText(i.container); containers->setCurrentIndex(index); containers->setCurrentIndex(0); ui->tableWidget_childElem->setCellWidget(rowNum,1,containers); } } void MainWindow::on_pushButton_chooseFile_clicked() { //如果未选中列表中的按钮,无法触发此按钮 if(ui->listWidget_elem->currentItem() == nullptr) return; QString elem = ui->listWidget_elem->currentItem()->text(); QString file_name = QFileDialog::getOpenFileName(this,"Open a file",QDir::homePath()); if(file_name == nullptr){ file_name = elements[elem]->iconPath; } QPixmap pix(file_name); ui->label_pic->setPixmap(pix.scaled(50,50,Qt::KeepAspectRatio)); elements[elem]->iconPath = file_name; ui->listWidget_elem->currentItem()->setIcon(QIcon(file_name)); } void MainWindow::on_pushButton_addElem_clicked() { QString elemName = "新加元素"; int id = 1; while(1){ if(elements.find(elemName)==elements.end()){ break; } elemName = "新加元素" + QString::number(id++); } QListWidgetItem* item = new QListWidgetItem(QIcon("/Users/menglanluo/菜狗.png"),elemName); ui->listWidget_elem->addItem(item); // ui->listWidget_elem->item(ui->listWidget_elem->count() - 1)->setSelected(true); // 设置选中 // ui->listWidget_elem->scrollToBottom(); elements[elemName] = new ElemPropertyData(); } void MainWindow::on_pushButton_delElem_clicked() { if(ui->listWidget_elem->currentItem() == nullptr) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除元素","确定要删除此元素吗?"); if(reply == QMessageBox::Yes){ QString elemName = ui->listWidget_elem->currentItem()->text(); delete elements[elemName]; elements.erase(elements.find(elemName)); delete ui->listWidget_elem->takeItem(ui->listWidget_elem->currentRow()); } } void MainWindow::on_listWidget_elem_itemDoubleClicked(QListWidgetItem *item) { ChangeNameDialog newName; newName.setModal(true); newName.exec(); QString name = newName.getNewName(); if(!name.isEmpty()){ if(elements.find(name)!=elements.end()){ QMessageBox::critical(this,"警告","该元素名已存在!"); return; } QString elemName = ui->listWidget_elem->currentItem()->text(); ElemPropertyData* newElem = elements[elemName]; elements.erase(elements.find(elemName)); elements[newName.getNewName()] = newElem; item->setText(newName.getNewName()); } } //基础元素数据变化触发保存 void MainWindow::on_lineEdit_name_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); elements[key]->labelName = ui->lineEdit_name->text(); } void MainWindow::on_lineEdit_size_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); elements[key]->size = ui->lineEdit_size->text(); } void MainWindow::on_lineEdit_maxlayer_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); elements[key]->maxLayer = ui->lineEdit_maxlayer->text(); } void MainWindow::on_lineEdit_score_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); elements[key]->score = ui->lineEdit_score->text(); } void MainWindow::on_spinBox_drop_valueChanged(int arg1) { if(ui->listWidget_elem->currentItem() == nullptr) return; QString key = ui->listWidget_elem->currentItem()->text(); elements[key]->dropConfig = arg1; } //TODO: 保存当前元素的所有数据,界面加载当前元素数据 void MainWindow::on_listWidget_elem_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { //每一步改变基本都会触发保存,但是表格内嵌的组件如combobox暂时没找到触发保存的办法 setUi(elements[current->text()]); } //替换资源文件 void MainWindow::on_tableWidget_animation_cellDoubleClicked(int row, int column) { if(ui->listWidget_elem->currentItem()==nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; //表格内容修改flag animTableItemChanged = true; if(column == 1){ ResFileDialog res; res.setModal(true); res.exec(); QString fileName = res.getResName(); if(!fileName.isEmpty()){ QTableWidgetItem* res = new QTableWidgetItem(getFileName(fileName)); // 此单元格不可编辑 res->setFlags(res->flags() & ~Qt::ItemIsEditable); ui->tableWidget_animation->setItem(row,1,res); QComboBox* timeLine = createTimelineBox("",fileName,TimelineType::Animation); ui->tableWidget_animation->setCellWidget(row,column+1,timeLine); //保存当前数据 elem->statusEffect[row].res = fileName; } } } ///动画区时间线数据发生改变 void MainWindow::onTimelineTextChanged(const QString &arg1) { if(ui->listWidget_elem->currentItem() == nullptr) return; //获取时间线列表所在位置 std::cout<<"current timeline is:"<(this->sender()); int x = timeline->frameGeometry().x(); int y = timeline->frameGeometry().y(); QModelIndex index = ui->tableWidget_animation->indexAt(QPoint(x,y)); int row = index.row(); //修改数据 ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; elem->statusEffect[row].timeline = timeline->currentText(); } ///容器池区时间线数据发生改变 void MainWindow::onPoolTimelineTextChanged(const QString &arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return; //获取时间线列表所在位置 std::cout<<"current timeline is:"<(this->sender()); int x = timeline->frameGeometry().x(); int y = timeline->frameGeometry().y(); QModelIndex index = ui->tableWidget_containerPool->indexAt(QPoint(x,y)); int row = index.row(); int column = index.column(); //修改数据 ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int poolIndex = elem->getPoolIndex(ui->listWidget_pool->currentItem()->text()); if(column == 2) elem->container[poolIndex].table[row].initTimeline = timeline->currentText(); else if(column == 3) elem->container[poolIndex].table[row].clickTimeline = timeline->currentText(); else if(column == 4) elem->container[poolIndex].table[row].effectTimeline = timeline->currentText(); else if(column == 5) elem->container[poolIndex].table[row].vanishTimeline = timeline->currentText(); } ///子元素使用池子数据发生改变 void MainWindow::onPoolsTextChanged(const QString &arg1) { if(ui->listWidget_elem->currentItem() == nullptr) return; //获取池子列表所在位置 QComboBox *pools = dynamic_cast(this->sender()); int x = pools->frameGeometry().x(); int y = pools->frameGeometry().y(); QModelIndex index = ui->tableWidget_childElem->indexAt(QPoint(x,y)); int row = index.row(); //修改数据 ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; elem->childElem[row].container = arg1; } ///事件配置checkBox状态发生改变 void MainWindow::onCheckBoxStateChanged(int state) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; //获取checkBox所在位置 QCheckBox *check = dynamic_cast(this->sender()); int x = check->frameGeometry().x(); int y = check->frameGeometry().y(); QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y)); int row = index.row(); int column = index.column(); //修改数据 ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); ElemPropertyData::EventConfig &eventData = elem->statusConfig[statusIndex].eventConfig[row]; //是否需要颜色一致 if(column == 1){ if(state == 0) eventData.consisColor = false; else eventData.consisColor = true; std::cout<<"颜色是否需要一致状态:"<listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; //获取特效列表所在位置 QComboBox *effect = dynamic_cast(this->sender()); int x = effect->frameGeometry().x(); int y = effect->frameGeometry().y(); QModelIndex index = ui->tableWidget_event->indexAt(QPoint(x,y)); int row = index.row(); //修改数据 ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int statusIndex = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[statusIndex].eventConfig[row].specialEffect = arg1; } void MainWindow::on_pushButton_addAnimation_clicked() { if(ui->listWidget_elem->currentItem()==nullptr) return; int rowNum = ui->tableWidget_animation->rowCount(); ui->tableWidget_animation->insertRow(rowNum); QString elemName = ui->listWidget_elem->currentItem()->text(); ElemPropertyData* elem = elements[elemName]; QString animName = "anim"; int id = 1; while(1){ if(elem->isSingleAnimName(animName)){ break; } animName = "anim" + QString::number(id++); } ui->tableWidget_animation->setItem(rowNum,0,new QTableWidgetItem(animName)); QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件"); // 此单元格不可编辑 res->setFlags(res->flags() & ~Qt::ItemIsEditable); ui->tableWidget_animation->setItem(rowNum,1,res); ui->tableWidget_animation->setCellWidget(rowNum,2,new QComboBox); ui->tableWidget_animation->setItem(rowNum,3,new QTableWidgetItem("0")); elem->statusEffect.push_back(ElemPropertyData::StatusEffect(animName)); //更新与动画相关的下拉选项 ui->comboBox_initAnim->addItem(animName); ui->comboBox_clickAnim->addItem(animName); ui->comboBox_animation->addItem(animName); //更新状态配置表格当前状态的特效下拉选项 if(ui->listWidget_status->currentItem() != nullptr){ int rowNum = ui->tableWidget_event->rowCount(); for(int i=0;i(ui->tableWidget_event->cellWidget(i,3)); effect->addItem(animName); } } } void MainWindow::on_pushButton_delAnimation_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->tableWidget_animation->currentRow() == -1) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此动画吗?"); if(reply == QMessageBox::Yes){ int curRow = ui->tableWidget_animation->currentRow(); QString animName = ui->tableWidget_animation->item(curRow,0)->text(); QVector &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect; for(int i=0;itableWidget_animation->removeRow(curRow); //更新动画相关的下拉选项 updateAnimComboBox(animName); ui->comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animName)); ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animName)); ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animName)); } } void MainWindow::on_tableWidget_animation_itemChanged(QTableWidgetItem *item) { if(!animTableItemChanged) return; animTableItemChanged = false; int column = item->column(); int row = item->row(); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QVector &animVec = elem->statusEffect; if(column == 0){ QString newName = ui->tableWidget_animation->item(row,0)->text(); if(!elem->isSingleAnimName(newName)){ QMessageBox::critical(this,"警告","该动画名已存在!"); ui->tableWidget_animation->item(row,0)->setText(animVec[row].name); return; } std::cout<<"名字发生改变,新名字:"<comboBox_initAnim->removeItem(ui->comboBox_initAnim->findText(animVec[row].name)); ui->comboBox_clickAnim->removeItem(ui->comboBox_clickAnim->findText(animVec[row].name)); ui->comboBox_animation->removeItem(ui->comboBox_animation->findText(animVec[row].name)); ui->comboBox_initAnim->addItem(newName); ui->comboBox_clickAnim->addItem(newName); ui->comboBox_animation->addItem(newName); animVec[row].name = newName; } //资源名发生修改 else if(column == 1){ std::cout<<"动画资源发生改变,新资源名:"<tableWidget_animation->item(row,1)->text())<tableWidget_animation->item(row,3)->text().toDouble(&ok); int zOrder = ui->tableWidget_animation->item(row,3)->text().toInt(); if(!ok || zOrder<0 || zOrder>100000){ QMessageBox::critical(this,"警告","z-Order值超出范围!"); ui->tableWidget_animation->item(row,3)->setText(animVec[row].zOrder); return; } std::cout<<"z-Order值发生改变,新值为:"<text(); } } void MainWindow::on_pushButton_addCollectAnim_clicked() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString collAnimName = "collAnim"; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int id = 1; while(1){ if(elem->getCollAnimIndex(collAnimName) == -1){ break; } collAnimName = "collAnim" + QString::number(id++); } ui->listWidget_collectAnim->addItem(new QListWidgetItem(collAnimName)); ElemPropertyData::CollAnim collAnim(collAnimName); elem->collAnim.push_back(collAnim); ui->comboBox_collectAnimation->addItem(collAnimName); // ui->listWidget_collectAnim->item(ui->listWidget_collectAnim->count() - 1)->setSelected(true); // 设置选中 // ui->listWidget_collectAnim->scrollToBottom(); } void MainWindow::on_pushButton_delCollectAnim_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除动画","确定要删除此收集动画吗?"); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; if(reply == QMessageBox::Yes){ QString delName = ui->listWidget_collectAnim->currentItem()->text(); QVector &collAnimVec = elem->collAnim; for(int i=0;ilistWidget_collectAnim->takeItem(ui->listWidget_collectAnim->currentRow()); updateCollAnimComboBox(delName); ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(delName)); } } void MainWindow::on_listWidget_collectAnim_itemDoubleClicked(QListWidgetItem *item) { ChangeNameDialog newName; newName.setModal(true); newName.exec(); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QString name = newName.getNewName(); if(!name.isEmpty()){ if(elem->getCollAnimIndex(name) != -1){ QMessageBox::critical(this,"警告","该收集动画名已存在!"); return; } updateCollAnimComboBox(item->text()); ui->comboBox_collectAnimation->removeItem(ui->comboBox_collectAnimation->findText(item->text())); ui->comboBox_collectAnimation->addItem(name); elem->collAnim[elem->getCollAnimIndex(item->text())].name = name; item->setText(name); } } void MainWindow::on_comboBox_animationType_currentTextChanged(const QString &arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getCollAnimIndex(ui->listWidget_collectAnim->currentItem()->text()); elem->collAnim[index].type = arg1; } void MainWindow::on_comboBox_animation_currentTextChanged(const QString &arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getCollAnimIndex(ui->listWidget_collectAnim->currentItem()->text()); elem->collAnim[index].anim = arg1; } void MainWindow::on_lineEdit_node_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getCollAnimIndex(ui->listWidget_collectAnim->currentItem()->text()); elem->collAnim[index].node = ui->lineEdit_node->text(); } void MainWindow::on_lineEdit_shadow_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_collectAnim->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getCollAnimIndex(ui->listWidget_collectAnim->currentItem()->text()); elem->collAnim[index].shadow = ui->lineEdit_shadow->text(); } //设置收集动画显示 void MainWindow::setCollectAnimUi(QString collectAnimName) { if(ui->listWidget_collectAnim->currentItem() != nullptr){ ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; ElemPropertyData::CollAnim collAnimData = elem->collAnim[elem->getCollAnimIndex(collectAnimName)]; ui->lineEdit_node->setText(collAnimData.node); ui->lineEdit_shadow->setText(collAnimData.shadow); std::cout<comboBox_animationType->setCurrentIndex(1); int index = ui->comboBox_animation->findText(collAnimData.anim); if(index == -1) index = 0; ui->comboBox_animation->setCurrentIndex(index); } } void MainWindow::on_listWidget_collectAnim_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { //TODO: 或许需要另外保存当前界面的数据 if(current != nullptr){ setCollectAnimUi(current->text()); } } //生成模板并更新状态配置的数据 void MainWindow::on_pushButton_genTemp_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->count() > 0) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; for(int i=0;imaxLayer.toInt();i++){ ui->listWidget_status->addItem(QString::number(i)); ElemPropertyData::StatusConfig status(QString::number(i)); elem->statusConfig.push_back(status); } } //添加状态,若已经生成最大层数全部状态则按钮无效 void MainWindow::on_pushButton_addStatus_clicked() { if(ui->listWidget_elem->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QString statusName; for(int i=0;imaxLayer.toInt();i++){ if(elem->getStatusValIndex(QString::number(i)) == -1){ statusName = QString::number(i); break; } } if(!statusName.isEmpty()){ ui->listWidget_status->addItem(statusName); ElemPropertyData::StatusConfig status(statusName); elem->statusConfig.push_back(status); } } //TODO: 删除状态值对应的数据 void MainWindow::on_pushButton_delStatus_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此状态吗?"); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; if(reply == QMessageBox::Yes){ for(int i=0;istatusConfig.size();i++){ if(elem->statusConfig[i].statusValue == ui->listWidget_status->currentItem()->text()){ elem->statusConfig.remove(i); break; } } delete ui->listWidget_status->takeItem(ui->listWidget_status->currentRow()); } } //修改状态值,检查修改后的状态值是否合法,并转移数据 void MainWindow::on_listWidget_status_itemDoubleClicked(QListWidgetItem *item) { ChangeNameDialog newName; newName.setModal(true); newName.exec(); QString name = newName.getNewName(); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; if(!name.isEmpty()){ //TODO: 检查状态值合法性并转移数据 bool isNum;double tmp = name.toDouble(&isNum); int maxlayer = ui->lineEdit_maxlayer->text().toInt(); int statusNum = name.toInt(); if(!isNum ||statusNum < 0 || statusNum >= maxlayer){ QMessageBox::critical(this,"错误","状态值必须是大于等于0且小于最大层数的数字"); return; } if(elem->getStatusValIndex(name) == -1){ QMessageBox::critical(this,"警告","该状态值已存在"); return; } int index = elem->getStatusValIndex(item->text()); elem->statusConfig[index].statusValue = name; item->setText(name); } } void MainWindow::on_pushButton_addContainer_clicked() { if(ui->listWidget_elem->currentItem() == nullptr) return; QString poolName = "pool"; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int id = 1; while(1){ if(elem->getPoolIndex(poolName) == -1){ break; } poolName = "pool" + QString::number(id++); } ui->listWidget_pool->addItem(new QListWidgetItem(poolName)); ElemPropertyData::ContainerConfig container(poolName); elem->container.push_back(container); //子元素下拉列表添加可选项 int rowNum = ui->tableWidget_childElem->rowCount(); for(int i=0;i(ui->tableWidget_childElem->cellWidget(i,1)); containers->addItem(poolName); } } void MainWindow::on_pushButton_delContainer_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除状态","确定要删除此容器吗?"); if(reply == QMessageBox::Yes){ QString delPoolName = ui->listWidget_pool->currentItem()->text(); int index = elem->getPoolIndex(delPoolName); elem->container.remove(index); delete ui->listWidget_pool->takeItem(ui->listWidget_pool->currentRow()); //子元素下拉列表删除可选项 int rowNum = ui->tableWidget_childElem->rowCount(); for(int i=0;i(ui->tableWidget_childElem->cellWidget(i,1)); if(elem->childElem[i].container == delPoolName) containers->setCurrentIndex(0); containers->removeItem(containers->findText(delPoolName)); } } } void MainWindow::on_listWidget_pool_itemDoubleClicked(QListWidgetItem *item) { if(ui->listWidget_elem->currentItem() == nullptr) return; ChangeNameDialog newName; newName.setModal(true); newName.exec(); QString name = newName.getNewName(); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; if(!name.isEmpty()){ //TODO: 检查新名字唯一性 if(elem->getPoolIndex(name) != -1){ QMessageBox::critical(this,"警告","该容器名已存在!"); return; } int index = elem->getPoolIndex(item->text()); //子元素下拉列表可选项改名 int rowNum = ui->tableWidget_childElem->rowCount(); for(int i=0;i(ui->tableWidget_childElem->cellWidget(i,1)); if(elem->childElem[i].container == elem->container[index].poolName) containers->setCurrentIndex(0); containers->removeItem(containers->findText(elem->container[index].poolName)); containers->addItem(name); } elem->container[index].poolName = name; item->setText(name); } } void MainWindow::on_listWidget_pool_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { //TODO:保存切换前界面数据 if(current != nullptr){ setPoolUi(current->text()); } } void MainWindow::on_pushButton_addKey_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return; int rowNum = ui->tableWidget_containerPool->rowCount(); ui->tableWidget_containerPool->insertRow(rowNum); QString keyName = "0"; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int id = 1; while(1){ if(elem->isSingleContainerKey(ui->listWidget_pool->currentItem()->text(),keyName)){ break; } keyName = QString::number(id++); } ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(keyName)); QTableWidgetItem* res = new QTableWidgetItem("双击添加资源文件"); // 此单元格不可编辑 res->setFlags(res->flags() & ~Qt::ItemIsEditable); ui->tableWidget_containerPool->setItem(rowNum,1,res); for(int i=2;i<=5;i++){ ui->tableWidget_containerPool->setCellWidget(rowNum,i,new QComboBox); } ui->tableWidget_containerPool->setItem(rowNum,3,new QTableWidgetItem("0")); int index = elem->getPoolIndex(ui->listWidget_pool->currentItem()->text()); ElemPropertyData::ContainTable containTable(keyName); elem->container[index].table.push_back(containTable); } void MainWindow::on_pushButton_delKey_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr || ui->tableWidget_containerPool->currentRow() == -1) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除容器","确定要删除此容器吗?"); if(reply == QMessageBox::Yes){ int curRow = ui->tableWidget_containerPool->currentRow(); QString containerName = ui->tableWidget_containerPool->item(curRow,0)->text(); ElemPropertyData* elem =elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getPoolIndex(ui->listWidget_pool->currentItem()->text()); QVector &containerTable = elem->container[index].table; for(int i=0;itableWidget_containerPool->removeRow(curRow); } } void MainWindow::setPoolUi(QString poolName) { if(ui->listWidget_elem->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; ElemPropertyData::ContainerConfig poolData = elem->container[elem->getPoolIndex(poolName)]; int rowNum = ui->tableWidget_containerPool->rowCount(); for(int i=0;itableWidget_containerPool->removeRow(0); } for(const auto &i:poolData.table){ int rowNum = ui->tableWidget_containerPool->rowCount(); ui->tableWidget_containerPool->insertRow(rowNum); ui->tableWidget_containerPool->setItem(rowNum,0,new QTableWidgetItem(i.key)); QTableWidgetItem* res = new QTableWidgetItem(getFileName(i.res)); // 此单元格不可编辑 res->setFlags(res->flags() & ~Qt::ItemIsEditable); ui->tableWidget_containerPool->setItem(rowNum,1,res); ui->tableWidget_containerPool->setCellWidget(rowNum,2,createTimelineBox(i.initTimeline,i.res,TimelineType::Pool)); ui->tableWidget_containerPool->setCellWidget(rowNum,3,createTimelineBox(i.clickTimeline,i.res,TimelineType::Pool)); ui->tableWidget_containerPool->setCellWidget(rowNum,4,createTimelineBox(i.effectTimeline,i.res,TimelineType::Pool)); ui->tableWidget_containerPool->setCellWidget(rowNum,5,createTimelineBox(i.vanishTimeline,i.res,TimelineType::Pool)); ui->tableWidget_containerPool->setItem(rowNum,6,new QTableWidgetItem(i.zOrder)); } } void MainWindow::on_tableWidget_containerPool_cellDoubleClicked(int row, int column) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return; //容器表格内容修改flag poolTableItemChanged = true; if(column == 1){ ResFileDialog res; res.setModal(true); res.exec(); QString fileName = res.getResName(); if(!fileName.isEmpty()){ //TODO: 加载comboBox,随后文件名去除路径 ui->tableWidget_containerPool->setItem(row,column,new QTableWidgetItem(getFileName(fileName))); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getPoolIndex(ui->listWidget_pool->currentItem()->text()); elem->container[index].table[row].res = fileName; //加载时间线下拉列表 for(int i=2;i<=5;i++){ QComboBox* timeline = createTimelineBox("",fileName,TimelineType::Pool); ui->tableWidget_containerPool->setCellWidget(row,i,timeline); } } } } void MainWindow::on_tableWidget_containerPool_itemChanged(QTableWidgetItem *item) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_pool->currentItem() == nullptr) return; if(!poolTableItemChanged) return; poolTableItemChanged = false; int column = item->column(); int row = item->row(); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getPoolIndex(ui->listWidget_pool->currentItem()->text()); QVector &containerVec = elem->container[index].table; if(column == 0){ bool isNum;double tmp = item->text().toDouble(&isNum); if(item->text().toInt() < 0 || !isNum){ QMessageBox::critical(this,"错误","键值必须是大于等于0的数字"); item->setText(containerVec[row].key); return; } if(!elem->isSingleContainerKey(ui->listWidget_pool->currentItem()->text(),item->text())){ QMessageBox::critical(this,"警告","该键值已存在!"); item->setText(containerVec[row].key); return; } containerVec[row].key = item->text(); } //检查zOrder合法性 else if(column == 6){ QString zOrder = item->text(); bool isNum;double tmp = zOrder.toDouble(&isNum); if(item->text().toInt() < 0 || !isNum){ QMessageBox::critical(this,"错误","消失zOrder值必须是大于等于0的数字"); item->setText(containerVec[row].zOrder); return; } containerVec[row].zOrder = zOrder; } } ////切换tab时更新comboBox(或者每一次添加删除动画就更新一下该元素的comboBox?这样也更方便进行逻辑检查) //void MainWindow::on_tabWidget_currentChanged(int index) //{ // if(ui->listWidget_elem->currentItem() == nullptr) return; // QVector &animVec = elements[ui->listWidget_elem->currentItem()->text()]->statusEffect; // //如果目前展示的是收集动画,加载状态与效果配置中的动画到收集动画的动画下拉列表中 // //目前这种方法较为暴力,后期可以视动画数量进行优化 // if(index == 1){ // ui->comboBox_animation->clear(); // for(const auto &i:animVec){ // ui->comboBox_animation->addItem(i.name); // } // } // //如果目前展示的是状态配置,加载相应状态效果配置动画和收集动画 // else if(index == 2){ // ui->comboBox_initAnim->clear(); // ui->comboBox_clickAnim->clear(); // ui->comboBox_collectAnimation->clear(); // for(const auto &i:animVec){ // ui->comboBox_initAnim->addItem(i.name); // ui->comboBox_clickAnim->addItem(i.name); // } // for(auto i:elements[ui->listWidget_elem->currentItem()->text()]->collAnim){ // ui->comboBox_collectAnimation->addItem(i.name); // } // } //} void MainWindow::on_pushButton_addChildElem_clicked() { if(ui->listWidget_elem->currentItem() == nullptr) return; int rowNum = ui->tableWidget_childElem->rowCount(); ui->tableWidget_childElem->insertRow(rowNum); QString childElemName = "item"; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int id = 1; while(1){ if(elem->isSingleChildElemName(childElemName)){ break; } childElemName = "item" + QString::number(id++); } ui->tableWidget_childElem->setItem(rowNum,0,new QTableWidgetItem(childElemName)); ui->tableWidget_childElem->setCellWidget(rowNum,1,createPoolBox("尚未选择池子")); elem->childElem.push_back(ElemPropertyData::ChildElem(childElemName)); } void MainWindow::on_pushButton_delChildElem_clicked() { if(ui->listWidget_elem->currentItem() == nullptr || ui->tableWidget_childElem->currentRow() == -1) return; QMessageBox::StandardButton reply = QMessageBox::question(this,"删除子元素","确定要删除此子元素吗?"); if(reply == QMessageBox::Yes){ int curRow = ui->tableWidget_childElem->currentRow(); QString childElemName = ui->tableWidget_childElem->item(curRow,0)->text(); QVector &childElemVec = elements[ui->listWidget_elem->currentItem()->text()]->childElem; for(int i=0;itableWidget_childElem->removeRow(curRow); } } void MainWindow::on_tableWidget_childElem_itemChanged(QTableWidgetItem *item) { if(ui->listWidget_elem->currentItem() == nullptr) return; if(!childElemTableItemChanged) return; childElemTableItemChanged = false; int column = item->column(); int row = item->row(); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; QVector &childElemVec = elem->childElem; if(column == 0){ if(!elem->isSingleChildElemName(item->text())){ QMessageBox::critical(this,"警告","该子元素名已存在!"); item->setText(childElemVec[row].name); return; } childElemVec[row].name = item->text(); } //TODO: comboBox值修改后的保存 } void MainWindow::on_tableWidget_childElem_cellDoubleClicked(int row, int column) { if(ui->listWidget_elem->currentItem() == nullptr) return; //子元素表格双击改名置flag为true childElemTableItemChanged = true; } void MainWindow::on_checkBox_multiHit_stateChanged(int arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; if(arg1){ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].multiHit = true; } else{ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].multiHit = false; } } void MainWindow::on_checkBox_dropable_stateChanged(int arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; if(arg1){ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].dropable = true; } else{ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].dropable = false; } } void MainWindow::on_checkBox_needCollect_stateChanged(int arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; if(arg1){ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].needCollect = true; ui->lineEdit_collectionType->setReadOnly(false); } else{ int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].needCollect = false; ui->lineEdit_collectionType->setReadOnly(true); } } void MainWindow::on_lineEdit_collectionType_editingFinished() { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); ElemPropertyData::StatusConfig &data = elem->statusConfig[index]; data.collTargetType = ui->lineEdit_collectionType->text(); std::cout<<"收集的目标类型"<listWidget_elem->currentItem()==nullptr || ui->listWidget_status->currentItem() == nullptr) return; int rowNum = ui->tableWidget_event->rowCount(); ui->tableWidget_event->insertRow(rowNum); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; ElemPropertyData::EventConfig event; int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].eventConfig.push_back(event); ui->tableWidget_event->setCellWidget(rowNum,0,new QComboBox); ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(false)); ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox("尚未选择动画")); ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(false)); //设置触发动作 ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction()); } QString MainWindow::getFileName(QString filePath) { if(filePath == "双击添加资源文件") return filePath; int size = filePath.count(); int pos = 0; for(int i=size-1;i>=0;i--){ if(filePath[i] == '/'){ pos = i+1; break; } } QString fileName; for(int i=pos;ilistWidget_elem->currentItem() == nullptr || current == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getStatusValIndex(current->text()); ElemPropertyData::StatusConfig statusData = elem->statusConfig[index]; int comboIndex; //初始化动画 comboIndex = ui->comboBox_initAnim->findText(statusData.initAnim); if(comboIndex == -1) comboIndex = 0; ui->comboBox_initAnim->setCurrentIndex(comboIndex); //点击动画 comboIndex = ui->comboBox_clickAnim->findText(statusData.clickAnim); if(comboIndex == -1) comboIndex = 0; ui->comboBox_clickAnim->setCurrentIndex(comboIndex); //收集动画 comboIndex = ui->comboBox_collectAnimation->findText(statusData.collAnim); if(comboIndex == -1) comboIndex = 0; ui->comboBox_collectAnimation->setCurrentIndex(comboIndex); //多重打击 if(statusData.multiHit) ui->checkBox_multiHit->setCheckState(Qt::Checked); else ui->checkBox_multiHit->setCheckState(Qt::Unchecked); //可掉落 if(statusData.dropable) ui->checkBox_multiHit->setCheckState(Qt::Checked); else ui->checkBox_dropable->setCheckState(Qt::Unchecked); //是否需要收集 //TODO: 加载收集动画数据 ui->lineEdit_collectionType->clear(); if(statusData.needCollect){ ui->checkBox_needCollect->setCheckState(Qt::Checked); ui->lineEdit_collectionType->setReadOnly(false); std::cout<<"收集的目标类型"<lineEdit_collectionType->setText(statusData.collTargetType); } else{ ui->checkBox_needCollect->setCheckState(Qt::Unchecked); ui->lineEdit_collectionType->setReadOnly(true); } //事件配置 //TODO:设置事件表格下拉项 int rowNum = ui->tableWidget_event->rowCount(); for(int i=0;itableWidget_event->removeRow(0); } for(const auto &i:statusData.eventConfig){ int rowNum = ui->tableWidget_event->rowCount(); ui->tableWidget_event->insertRow(rowNum); //事件名称 ui->tableWidget_event->setCellWidget(rowNum,0,new QComboBox); //是否需要颜色一致 ui->tableWidget_event->setCellWidget(rowNum,1,createCheckBox(i.consisColor)); //tableWidget_event ui->tableWidget_event->setItem(rowNum,2,new QTableWidgetItem(i.changeMagnitude)); //特效 ui->tableWidget_event->setCellWidget(rowNum,3,createEffectBox(i.specialEffect)); //根据格子数量消除 ui->tableWidget_event->setCellWidget(rowNum,4,createCheckBox(i.elimATLattices)); //触发动作 ui->tableWidget_event->setCellWidget(rowNum,5,createTriggerAction()); } } void MainWindow::on_tableWidget_event_cellDoubleClicked(int row, int column) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; if(column == 2) eventTableItemChanged = true; } //状态变化幅度合法性检查及数据保存 void MainWindow::on_tableWidget_event_itemChanged(QTableWidgetItem *item) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; if(!eventTableItemChanged) return; eventTableItemChanged = false; int column = item->column(); int row = item->row(); ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); QVector &eventVec = elem->statusConfig[index].eventConfig; if(column == 2){ bool ok;double a = item->text().toDouble(&ok); int val = item->text().toInt(); if(!ok || val<0){ QMessageBox::critical(this,"警告","状态变化幅度是大于0的数字"); ui->tableWidget_event->item(row,2)->setText(QString::number(eventVec[row].changeMagnitude)); return; } std::cout<<"状态变化幅度发生改变,新值为:"<listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; std::cout<<"初始化动画:"<listWidget_elem->currentItem()->text()]; int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].initAnim = arg1; } void MainWindow::on_comboBox_clickAnim_currentTextChanged(const QString &arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].clickAnim = arg1; } void MainWindow::on_comboBox_collectAnimation_currentTextChanged(const QString &arg1) { if(ui->listWidget_elem->currentItem() == nullptr || ui->listWidget_status->currentItem() == nullptr) return; ElemPropertyData* elem = elements[ui->listWidget_elem->currentItem()->text()]; int index = elem->getStatusValIndex(ui->listWidget_status->currentItem()->text()); elem->statusConfig[index].collAnim = arg1; }