13:05 14.12.2024
Мы хотим написать виджет Qt на основе класса QWidget, позволяющий ввести в табличный компонент из одного столбца вещественные числа с валидацией ввода, а затем по нажатию кнопки "Обработать" подсчитать их арифметическое среднее, моду и медиану.
Используем для размещения данных удобный виджет QTableWidget, основанный на элементах и не требующий отдельной модели. В нашем случае таблице хватит одного столбца.
Весь код поместим в файл widget.h (как любят делать нейросети), а в widget.cpp напишем только
#include "widget.h"
Поскольку обычно нужно редактировать не что угодно, а тот или иной формат данных, покажем, как использовать стандартный QDoubleValidator для работы с данными ячейки QTableWidgetItem. Мы просто подменяем виджет ячейки на QLineEdit методом setCellWidget, а затем возвращаем полученное в QLineEdit значение в таблицу из метода getData, ранее назначенного слотом для сигнала returnPressed (нажатие Enter) от QLineEdit.
У нас это делается однократно при создании ячейки из метода addRow, но можно аналогично подключать стандартный или свой (библиотека QValidator) валидатор каждый раз, когда QTableWidgetItem переходит к режиму редактирования ячейки. Правда, тогда становится логичней написать отдельный
класс-делегат для редактирования ячейки таблицы QTableWidget, потому что у неё множество
сигналов, связанных с изменением состояния элементов.
Таким образом, при нажатии кнопки "Обработать" мы получаем числа из тех ячеек, в которых уже нет полей ввода QLineEdit и обрабатываем их. Учитывается текущая локаль при получении числа, так как её учитывает QDoubleValidator.
Ячейки можно сортировать, удалить или "занулить" нажатием клавиши F2. Ниже показан весь код в работе, прикреплён архив проекта и скриншот.
читать далее в блоге ПерСа rss2lj