/
MaximU
/
arraywidget
Обзор
Документация
Войти
/
MaximU
/
arraywidget
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
arraylegendwidget.cpp
210 строк
5 KB
user
Упорядочены #include.
27 июл 2026, 14:34
27 июл 2026, 14:34
f2675ea
Код
Авторство
О чём код?
#include "arraylegendwidget.h" #include <QPaintEvent> #include "conversions.h" #include "ui_arraylegendwidget.h" /*! * \brief Конструктор. * \param parent Родительский виджет. */ ArrayLegendWidget::ArrayLegendWidget(QWidget *parent) : QWidget(parent), ui(new Ui::ArrayLegendWidgetClass) { ui->setupUi(this); ui->widgetGradient->installEventFilter(this); } /*! * \brief Деструктор. */ ArrayLegendWidget::~ArrayLegendWidget() { delete ui; delete mColorMap; } /*! * \brief Обновляет легенды. */ void ArrayLegendWidget::updateView() { QList<DataProvider *> providerList; emit getProviderList(providerList); //// Синхронизация количества провайдеров и кнопок. if (providerList.count() != mProviderButtons.count()) { // Добавление недостающих. for (int i = mProviderButtons.count(); i < providerList.count(); i ++) { QToolButton *button = new QToolButton(this); button->setCheckable(true); connect(button, &QAbstractButton::toggled, this, &ArrayLegendWidget::slot_providerButton_toggled); // Добавление в компоновку. layout()->addWidget(button); mProviderButtons.append(button); } // Удаление лишних. for (int i = mProviderButtons.count(); i > providerList.count(); i --) { delete mProviderButtons.back(); mProviderButtons.pop_back(); } } //// Синхронизация кнопок и провайдеров. int i = 0; foreach (auto provider, providerList) { QToolButton *button = mProviderButtons[i]; button->blockSignals(true); QVariant value; value.setValue((void *)provider); button->setProperty("provider", value); button->setText(provider->name()); button->setChecked(provider->isVisible()); // Цвет текста. QPalette palette = button->palette(); palette.setColor(QPalette::ButtonText, provider->color()); button->setPalette(palette); button->blockSignals(false); i ++; } } /*! * \brief Обновляет значения минимума и максимума. */ void ArrayLegendWidget::updateUi() { bool dB = false; emit getdB(dB); double min = 0; emit getMin(min); if (dB) { min = todB_s(min); } ui->lineeditMin->setText(QString::number(min, 'f', 3)); double max = 0; emit getMax(max); if (dB) { max = todB_s(max); } ui->lineeditMax->setText(QString::number(max, 'f', 3)); } /*! * \brief Фильтр событий. * \param obj Объект, для которого обрабатывается событие. * \param event Событие. * \return true, если событие обработано. */ bool ArrayLegendWidget::eventFilter(QObject *obj, QEvent *event) { if (obj == ui->widgetGradient && event->type() == QEvent::Paint) { if (mColorMap != nullptr) { QPainter painter(ui->widgetGradient); mColorMap->drawGradient(&painter, ((QPaintEvent *)event)->rect(), ColorMap::Vertical); } return true; } return QObject::eventFilter(obj, event); } /*! * \brief Устанавливает карту цветов. * \param colorMap Карта цветов. */ void ArrayLegendWidget::setColorMap(ColorMap *colorMap) { if (mColorMap != colorMap) { delete mColorMap; mColorMap = colorMap; } ui->widgetGradient->repaint(); } /*! * \brief Вызывается при завершении редактирования значения максимума. */ void ArrayLegendWidget::on_lineeditMax_editingFinished() { bool dB = false; emit getdB(dB); bool ok = false; double max = ui->lineeditMax->text().toDouble(&ok); if (ok) { if (dB) { max = fromdB(max); } emit setMax(max); } updateUi(); } /*! * \brief Вызывается при завершении редактирования значения минимума. */ void ArrayLegendWidget::on_lineeditMin_editingFinished() { bool dB = false; emit getdB(dB); bool ok = false; double min = ui->lineeditMin->text().toDouble(&ok); if (ok) { if (dB) { min = fromdB(min); } emit setMin(min); } updateUi(); } /*! * \brief Вызывается при нажатии кнопки отображения провайдера данных. * \param checked Признак отображения. */ void ArrayLegendWidget::slot_providerButton_toggled(bool checked) { ArrayDataProvider *provider = (ArrayDataProvider *)sender()->property("provider").value<void *>(); provider->setVisible(checked); emit providersChanged(); }