Qt: редактируем список вещественных чисел с валидацией в ячейке QTableWidget

Dec 14, 2024 13:39



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
Previous post Next post
Up