Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //=============== mainwindow.h ===============//
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- QT_BEGIN_NAMESPACE
- namespace Ui { class MainWindow; }
- QT_END_NAMESPACE
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- MainWindow(QWidget *parent = nullptr);
- ~MainWindow();
- private slots:
- void on_spinBox_valueChanged(int arg1);
- void on_tableWidget_cellChanged(int row, int column);
- void on_pushButtonStart_clicked();
- private:
- Ui::MainWindow *ui;
- bool noAutoChange;
- };
- #endif // MAINWINDOW_H
- //=============== main.cpp ===============//
- #include "mainwindow.h"
- #include <QApplication>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
- return a.exec();
- }
- //=============== mainwindow.cpp ===============//
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- // Хранение фона для хранения
- // Чтобы работало красиво не только в светлой теме
- static QColor defaultBackgroundColor;
- static QPalette redLineEditPalette, defaultLineEditPalette;
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- noAutoChange = true; // Переменная для "блокировки" onCellChanged в таблице
- // Нахождение "нормального" цвета для фона клеток таблицы
- defaultBackgroundColor = ui->tableWidget->palette().color(QPalette::Base);
- redLineEditPalette.setColor(QPalette::Base, Qt::red);
- defaultLineEditPalette.setColor(QPalette::Base, defaultBackgroundColor);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::on_spinBox_valueChanged(int arg1)// Изменение spinbox
- {
- // Изменение кол-ва значений в таблице на значение из спинбокса
- ui->tableWidget->setRowCount(arg1);
- }
- void MainWindow::on_tableWidget_cellChanged(int row, int column) // Изменение ячейки таблицы(int строка, int колонка)
- {
- if (noAutoChange)
- {
- // Обработка изменений в таблице
- bool ok;
- ui->tableWidget->item(row, column)->text().toInt(&ok);
- if (ok)
- {
- // Если введена нормальная целая цифра
- ui->tableWidget->item(row, column)->setBackground(defaultBackgroundColor);
- }
- else
- {
- // Если введено неправильное значение
- ui->tableWidget->item(row, column)->setBackground(Qt::red);
- }
- }
- // Очистка поля с результатом
- ui->labelResult->clear();
- }
- void MainWindow::on_pushButtonStart_clicked() // Нажатие на кнопку старт
- {
- noAutoChange = false;
- int *arr = nullptr; // Создаём указатель динамической памяти
- int arrSize = ui->spinBox->value();
- arr = new int[arrSize]; // Выделяем память на нужное нам кол-во ячеек
- // Флаги для проверки ячеек на корректность значений
- bool okArr = true, okCell = true;
- for (int i = 0; i < arrSize; i++)
- {
- // Формируем массив
- if (ui->tableWidget->item(i, 0) != nullptr)
- {
- // Если ячейка существует, то проверяем на корректность его значения
- arr[i] = ui->tableWidget->item(i, 0)->text().toInt(&okCell);
- }
- else
- {
- // Если ячейки не существует, то она создаётся
- okCell = false;
- QTableWidgetItem * ti;
- ti = new QTableWidgetItem;
- ui->tableWidget->setItem(i, 0, ti);
- }
- if (okCell) // Если ячейка правильная, ставим её нормальный цвет
- ui->tableWidget->item(i, 0)->setBackground(defaultBackgroundColor);
- else
- {
- // Если нет, то меняем флаг правильности массива и ставим для ячейки красный цвет
- okArr = false;
- ui->tableWidget->item(i, 0)->setBackground(Qt::red);
- }
- }
- // Для нахождения мин/макс значения можно принять первое попавшееся значение из массива за изначальное значение
- int min = arr[0];
- if (okArr)
- {
- // Если все значения в массиве правильные, то проходим по массиву и находим минимум
- for (int i = 1; i < arrSize; i++)
- if (arr[i] < min)
- min = arr[i];
- ui->labelResult->setNum(min);
- }
- else
- {
- // Если же какие-то значения не правильные, то выводим надпись Error
- ui->labelResult->setText("Ошибка");
- }
- delete [] arr; // Освобождаем память
- arr = nullptr; // Отмечаем, что память свободна
- noAutoChange = true;
- }
Add Comment
Please, Sign In to add comment