kirya_shkolnik

mainwindow.cpp

Jun 9th, 2021
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.41 KB | None | 0 0
  1.  
  2.  
  3. //=============== mainwindow.h ===============//
  4.  
  5. #ifndef MAINWINDOW_H
  6. #define MAINWINDOW_H
  7.  
  8. #include <QMainWindow>
  9.  
  10. QT_BEGIN_NAMESPACE
  11. namespace Ui { class MainWindow; }
  12. QT_END_NAMESPACE
  13.  
  14. class MainWindow : public QMainWindow
  15. {
  16.     Q_OBJECT
  17.  
  18. public:
  19.     MainWindow(QWidget *parent = nullptr);
  20.     ~MainWindow();
  21.  
  22. private slots:
  23.  
  24.     void on_spinBox_valueChanged(int arg1);
  25.  
  26.     void on_tableWidget_cellChanged(int row, int column);
  27.  
  28.     void on_pushButtonStart_clicked();
  29.  
  30. private:
  31.     Ui::MainWindow *ui;
  32.     bool noAutoChange;
  33. };
  34. #endif // MAINWINDOW_H
  35.  
  36.  
  37.  
  38.  
  39.  
  40. //=============== main.cpp ===============//
  41. #include "mainwindow.h"
  42.  
  43. #include <QApplication>
  44.  
  45. int main(int argc, char *argv[])
  46. {
  47.     QApplication a(argc, argv);
  48.     MainWindow w;
  49.     w.show();
  50.     return a.exec();
  51. }
  52.  
  53.  
  54.  
  55.  
  56. //=============== mainwindow.cpp ===============//
  57.  
  58. #include "mainwindow.h"
  59. #include "ui_mainwindow.h"
  60.  
  61. // Хранение фона для хранения
  62. // Чтобы работало красиво не только в светлой теме
  63. static QColor defaultBackgroundColor;
  64. static QPalette redLineEditPalette, defaultLineEditPalette;
  65.  
  66. MainWindow::MainWindow(QWidget *parent)
  67.     : QMainWindow(parent)
  68.     , ui(new Ui::MainWindow)
  69. {
  70.     ui->setupUi(this);
  71.  
  72.     noAutoChange = true; // Переменная для "блокировки" onCellChanged в таблице
  73.     // Нахождение "нормального" цвета для фона клеток таблицы
  74.     defaultBackgroundColor = ui->tableWidget->palette().color(QPalette::Base);
  75.  
  76.     redLineEditPalette.setColor(QPalette::Base, Qt::red);
  77.     defaultLineEditPalette.setColor(QPalette::Base, defaultBackgroundColor);
  78. }
  79.  
  80. MainWindow::~MainWindow()
  81. {
  82.     delete ui;
  83. }
  84.  
  85.  
  86. void MainWindow::on_spinBox_valueChanged(int arg1)// Изменение spinbox
  87. {
  88.     // Изменение кол-ва значений в таблице на значение из спинбокса
  89.     ui->tableWidget->setRowCount(arg1);
  90. }
  91.  
  92. void MainWindow::on_tableWidget_cellChanged(int row, int column) // Изменение ячейки таблицы(int строка, int колонка)
  93. {
  94.     if (noAutoChange)
  95.     {
  96.         // Обработка изменений в таблице
  97.         bool ok;
  98.         ui->tableWidget->item(row, column)->text().toInt(&ok);
  99.         if (ok)
  100.         {
  101.             // Если введена нормальная целая цифра
  102.             ui->tableWidget->item(row, column)->setBackground(defaultBackgroundColor);
  103.         }
  104.         else
  105.         {
  106.             // Если введено неправильное значение
  107.             ui->tableWidget->item(row, column)->setBackground(Qt::red);
  108.         }
  109.     }
  110.  
  111.     // Очистка поля с результатом
  112.     ui->labelResult->clear();
  113. }
  114.  
  115.  
  116.  
  117. void MainWindow::on_pushButtonStart_clicked() // Нажатие на кнопку старт
  118. {
  119.     noAutoChange = false;
  120.  
  121.     int *arr = nullptr; // Создаём указатель динамической памяти
  122.     int arrSize = ui->spinBox->value();
  123.     arr = new int[arrSize]; // Выделяем память на нужное нам кол-во ячеек
  124.  
  125.     // Флаги для проверки ячеек на корректность значений
  126.     bool okArr = true, okCell = true;
  127.  
  128.     for (int i = 0; i < arrSize; i++)
  129.     {
  130.         // Формируем массив
  131.         if (ui->tableWidget->item(i, 0) != nullptr)
  132.         {
  133.             // Если ячейка существует, то проверяем на корректность его значения
  134.             arr[i] = ui->tableWidget->item(i, 0)->text().toInt(&okCell);
  135.         }
  136.         else
  137.         {
  138.             // Если ячейки не существует, то она создаётся
  139.             okCell = false;
  140.             QTableWidgetItem * ti;
  141.             ti = new QTableWidgetItem;
  142.             ui->tableWidget->setItem(i, 0, ti);
  143.         }
  144.  
  145.         if (okCell) // Если ячейка правильная, ставим её нормальный цвет
  146.             ui->tableWidget->item(i, 0)->setBackground(defaultBackgroundColor);
  147.         else
  148.         {
  149.             // Если нет, то меняем флаг правильности массива и ставим для ячейки красный цвет
  150.             okArr = false;
  151.             ui->tableWidget->item(i, 0)->setBackground(Qt::red);
  152.         }
  153.     }
  154.  
  155.     // Для нахождения мин/макс значения можно принять первое попавшееся значение из массива за изначальное значение
  156.     int min = arr[0];
  157.     if (okArr)
  158.     {
  159.         // Если все значения в массиве правильные, то проходим по массиву и находим минимум
  160.         for (int i = 1; i < arrSize; i++)
  161.             if (arr[i] < min)
  162.                 min = arr[i];
  163.         ui->labelResult->setNum(min);
  164.     }
  165.     else
  166.     {
  167.         // Если же какие-то значения не правильные, то выводим надпись Error
  168.         ui->labelResult->setText("Ошибка");
  169.     }
  170.  
  171.     delete [] arr; // Освобождаем память
  172.     arr = nullptr; // Отмечаем, что память свободна
  173.  
  174.     noAutoChange = true;
  175. }
Add Comment
Please, Sign In to add comment