/
Leonidvgol
/
Arkanoid_Level_Editor
Обзор
Документация
Войти
/
Leonidvgol
/
Arkanoid_Level_Editor
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
mainwindow.cpp
229 строк
8 KB
Leonid_Golovyrin
Добавлен буфер данных ячейки
24 мар 2025, 22:04
24 мар 2025, 22:04
8e41bc4
Код
Авторство
О чём код?
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); this->cb = QApplication::clipboard(); //Считываем установки из конфигурационного файла settings=new QSettings("Arkanoid_LE.ini", QSettings::NativeFormat); this->RowNumber=settings->value("RowNumber",5).toInt(); this->ColNumber=settings->value("ColNumber",9).toInt(); ui->LevelNum->setValue(settings->value("Level",1).toInt()); ui->Field_tableWidget->setRowCount(this->RowNumber); ui->Field_tableWidget->setColumnCount(this->ColNumber); ui->Path->setText(settings->value("Path",QDir::currentPath()).toString()); //Вызываем процедуру очистки и масштабирования таблицы CleanTable(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_SimpleBrix_clicked() { if (ui->Field_tableWidget->currentItem() !=NULL ){ ui->Field_tableWidget->currentItem()->setBackground(QColor(0, 255, 0)); } else{ ui->Field_tableWidget->setItem(ui->Field_tableWidget->currentRow(), ui->Field_tableWidget->currentColumn(),new QTableWidgetItem("1")); ui->Field_tableWidget->currentItem()->setBackground(QColor(0, 255, 0)); } } void MainWindow::on_pushButton_ExplosionBrix_clicked() { if (ui->Field_tableWidget->currentItem() !=NULL ){ ui->Field_tableWidget->currentItem()->setBackground(QColor(255, 0, 0)); } else{ ui->Field_tableWidget->setItem(ui->Field_tableWidget->currentRow(), ui->Field_tableWidget->currentColumn(),new QTableWidgetItem("1")); ui->Field_tableWidget->currentItem()->setBackground(QColor(255, 0, 0)); } } void MainWindow::on_pushButton_SurpriseBrix_clicked() { if (ui->Field_tableWidget->currentItem() !=NULL ){ ui->Field_tableWidget->currentItem()->setBackground(QColor(0, 0, 255)); } else{ ui->Field_tableWidget->setItem(ui->Field_tableWidget->currentRow(), ui->Field_tableWidget->currentColumn(),new QTableWidgetItem("1")); ui->Field_tableWidget->currentItem()->setBackground(QColor(0, 0, 255)); } } void MainWindow::on_pushButton_SaveLevel_clicked() { QJsonObject LevelStructure; LevelStructure.begin(); LevelStructure.insert("RowCount",this->RowNumber); LevelStructure.insert("ColumnCount",this->ColNumber); QJsonArray Brixes; for(int i=0;i<ui->Field_tableWidget->rowCount();i++){ for(int j=0;j<ui->Field_tableWidget->columnCount();j++){ if(ui->Field_tableWidget->item(i,j) !=NULL){ QJsonObject Brix; Brix.insert("row",i); Brix.insert("col",j); if(ui->Field_tableWidget->item(i,j)->background().color()==QColor(255, 0, 0)) Brix.insert("type",3); if(ui->Field_tableWidget->item(i,j)->background().color()==QColor(0, 255, 0)) Brix.insert("type",1); if(ui->Field_tableWidget->item(i,j)->background().color()==QColor(0, 0, 255)) Brix.insert("type",2); Brix.insert("resist",ui->Field_tableWidget->item(i,j)->data(0).toInt()); Brixes.push_back(Brix); } } } LevelStructure.insert("Brixes",Brixes); LevelStructure.end(); QFile file; file.setFileName(ui->Path->text()+QDir::separator()+"Level"+QString::number(ui->LevelNum->value())+".json"); file.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream stream( &file ); QJsonDocument doc(LevelStructure); QString jsonString = doc.toJson(QJsonDocument::Indented); stream << jsonString; file.close(); } void MainWindow::on_ChoosePath_clicked() { this->ui->Path->setText(QFileDialog::getExistingDirectory(this, tr("Open Directory"), "./", QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks)); } void MainWindow::on_pushButton_LoadLevel_clicked() { //Загружаем уровень из файла QString val; QFile file; file.setFileName(ui->Path->text()+QDir::separator()+"Level"+QString::number(ui->LevelNum->value())+".json"); file.open(QIODevice::ReadOnly | QIODevice::Text); val = file.readAll(); file.close(); QJsonParseError error; QJsonDocument doc = QJsonDocument::fromJson(val.toUtf8(), &error); qDebug() << "Error: " << error.errorString() << error.offset << error.error; if (doc.isObject()) { QJsonObject json = doc.object(); this->RowNumber=json.value("RowCount").toInt(); this->ColNumber=json.value("ColumnCount").toInt(); this->CleanTable(); QJsonArray jsonArray = json["Brixes"].toArray(); foreach (const QJsonValue & value, jsonArray) { if (value.isObject()) { QJsonObject obj = value.toObject(); int i = obj["row"].toInt(); int j = obj["col"].toInt(); int type = obj["type"].toInt(); int resist = obj["resist"].toInt(); ui->Field_tableWidget->setItem(i, j,new QTableWidgetItem(QString::number(resist))); if(type==3) ui->Field_tableWidget->item(i,j)->setBackground(QColor(255, 0, 0)) ; if(type==1) ui->Field_tableWidget->item(i,j)->setBackground(QColor(0, 255, 0)) ; if(type==2) ui->Field_tableWidget->item(i,j)->setBackground(QColor(0, 0, 255)) ; } } } } void MainWindow::on_action_clean_triggered() { CleanTable(); } void MainWindow::on_action__quit_triggered() { //Перед выходом сохраняем настройки в конфигурационном файле settings->setValue("RowNumber",QVariant::fromValue(this->RowNumber)); settings->setValue("ColNumber",QVariant::fromValue(this->ColNumber)); settings->setValue("Path",ui->Path->text()); settings->setValue("Level",QVariant::fromValue(ui->LevelNum->value())); settings->sync(); QApplication::quit(); } void MainWindow::on_action_triggered() { DialogSetRCNumber* DialogRCN = new DialogSetRCNumber(this,RowNumber,ColNumber); DialogRCN->exec(); if(DialogRCN->OutValueR+DialogRCN->OutValueC>0){ // Проверяем как вышел пользователь. Если нули то нажата отмена RowNumber=DialogRCN->OutValueR; ColNumber=DialogRCN->OutValueC; } CleanTable(); } void MainWindow::CleanTable() { ui->Field_tableWidget->setRowCount(RowNumber); ui->Field_tableWidget->setColumnCount(ColNumber); ui->Field_tableWidget->clear(); // Вычисляем размеры ячеек int RH = (ui->Field_tableWidget->height() - ui->Field_tableWidget->horizontalHeader()->height())/RowNumber; int RC = (ui->Field_tableWidget->width() - ui->Field_tableWidget->verticalHeader()->width())/ColNumber; // Устанавливаем подписи и высоту/ширину ячеек таблицы for(int i=0;i<RowNumber;i++) { ui->Field_tableWidget->setVerticalHeaderItem(i, new QTableWidgetItem(QString::number(i))); ui->Field_tableWidget->setRowHeight(i,RH); // } for(int j=0;j<ColNumber;j++) { ui->Field_tableWidget->setHorizontalHeaderItem(j, new QTableWidgetItem(QString::number(j))); ui->Field_tableWidget->setColumnWidth(j,RC); } } void MainWindow::on_action_Copy_triggered() { // Копируем заполненную ячейку if(ui->Field_tableWidget->currentItem()!=NULL) { QString string4cb = ui->Field_tableWidget->currentItem()->background().color().name(); string4cb=string4cb+"~"+ui->Field_tableWidget->currentItem()->text(); this->cb->setText(string4cb); } } void MainWindow::on_action_Paste_triggered() { // Вставляем скопированную ячейку из буфера обмена QString string4cb = this->cb->text(QClipboard::Mode::Clipboard); QString MyColor=string4cb.left(string4cb.indexOf("~")); QString MyValue=string4cb.right(string4cb.length()-string4cb.indexOf("~")-1); if (ui->Field_tableWidget->currentItem()==NULL) ui->Field_tableWidget->setItem(ui->Field_tableWidget->currentRow(), ui->Field_tableWidget->currentColumn(),new QTableWidgetItem(MyValue)); else ui->Field_tableWidget->currentItem()->setText(MyValue); ui->Field_tableWidget->currentItem()->setBackground(QColor(MyColor)); }