/
MaximU
/
arraywidget
Обзор
Документация
Войти
/
MaximU
/
arraywidget
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
arraywidget.h
222 строки
12 KB
user
Forward declaration namespace Ui { class …; } и Ui::… *ui.
27 июл 2026, 14:24
27 июл 2026, 14:24
2696d58
Код
Авторство
О чём код?
#ifndef ARRAYWIDGET_H #define ARRAYWIDGET_H #include <QActionGroup> #include <QMenu> #include <QSettings> #include <QStringList> #include <QWidget> #include <float.h> #include <qwt_plot_item.h> #include "dataprovider.h" #include "plotsetwidget.h" namespace Ui { class ArrayWidgetClass; } /*! * \brief Класс виджета для отображения четырехмерных, трехмерных, двумерных массивов. */ class ArrayWidget : public QWidget { Q_OBJECT static const int DimensionCount = 4; //!< Максимальная размерность отображаемого массива. static const int NoAxisMapping = INT_MIN; //!< Константа - признак отмены маппинга координат осей. public: /*! * \brief Перечисление идентификаторов графиков. */ enum PlotIDs { PlotIDLeftLeftPlot, //!< Идентификатор левого левого графика. PlotIDCentralPlot, //!< Идентификатор центрального графика. PlotIDLeftPlot, //!< Идентификатор левого графика. PlotIDBottomPlot, //!< Идентификатор нижнего графика. }; public: explicit ArrayWidget(QWidget *parent); ~ArrayWidget() override; void writeSettings(QSettings &settings); void readSettings(QSettings &settings); void setDimension1Name(const QString &name); void setDimension2Name(const QString &name); void setDimension3Name(const QString &name); void setDimension4Name(const QString &name); void addDimension1Unit(const QString &unit); void addDimension2Unit(const QString &unit); void addDimension3Unit(const QString &unit); void addDimension4Unit(const QString &unit); void setDimension1Count(int count, bool update = false); void setDimension2Count(int count, bool update = false); void setDimension3Count(int count, bool update = false); void setDimension4Count(int count, bool update = false); void setDimension1Base(int base, bool update = false); void setDimension2Base(int base, bool update = false); void setDimension3Base(int base, bool update = false); void setDimension4Base(int base, bool update = false); void setDimension2PlotVisible(bool visible); bool isDimension2PlotVisible(); void setScheme(int dimension, const QVariantList &newScheme); QVariantList scheme(int dimension) const; void setPlotsetHeight(int height); int plotsetHeight(); void setPlotsetDivision(QSizeF division); QSizeF plotsetDivision(); void setPlotsetLeftPlotVisible(bool visible); bool isPlotsetLeftPlotVisible(); void setPlotsetBottomPlotVisible(bool visible); bool isPlotsetBottomPlotVisible(); bool isAuto(); void setAuto(bool value); bool isAutoCommon(); void setAutoCommon(bool value); bool isDB(); void setDB(bool value); std::vector<int> dimensionsMap(); void setDimensionsMap(std::vector<int> map); bool isAllowRotation(); void setAllowRotation(bool forbid); int currentProviderListIndex(); void setCurrentProviderListIndex(int index); void addDataProviderList(const QString &label, const QList<DataProvider *> &providerList); void updateView(); void updateUi(); void setSplitterState(const QByteArray &state); QByteArray splitterState(); void setProvidersScheme(const QByteArray &scheme); QByteArray providersScheme(); bool isInfoVisible(); void setInfoPanelVisible(bool visible); void setInfoPanelHeight(int height); int currentIndex(int dimension); protected: bool eventFilter(QObject *obj, QEvent *event) override; void setupDimension2Plot(); QString schemeToString(const QVariantList &scheme); QVariantList stringToScheme(const QString &string); void getProviderList(QList<DataProvider *> &providerList); double minimum(); void setMinimum(double value); double maximum(); void setMaximum(double value); void checkMinMax(double &min, double &max); private: Ui::ArrayWidgetClass *ui; QFont mFont; //!< Шрифт отображения надписей на графиках. QMenu mMenuAuto; //!< Меню выбора варианта автомасштабирования. QMenu *mMenus[DimensionCount]{}; //!< Контекстные меню. QActionGroup *mActionGroups[DimensionCount]{}; //!< Группы пунктов меню. QString mDimensionsNames[DimensionCount]; //!< Названия шкал. QStringList mDimensionsUnits[DimensionCount]; //!< Названия единиц измерения. int mDimensionUnitsVariants[DimensionCount]; //!< Текущий вариант отображения номеров отсчетов в значения шкал. int mDimensionsCounts[DimensionCount]; //!< Количества элементов. int mDimensionsBases[DimensionCount]; //!< Отображаемые начальные индексы. int mCurrentIndexes[DimensionCount]; //!< Индексы под курсором в соответствии с размерностями массива. std::vector<int> mDimensionsMap; //!< Карта отображения размерностей. bool mAllowRotation = true; //!< Признак вращения графиков. bool mLockUpdate = false; //!< Признак блокировки выполнения обновления отображения. bool mFullUpdate = true; //!< Признак необходимости полного обновления. bool mAuto = true; //!< Признак автомасштабирования. bool mAutoCommon = false; //!< Признак автомасштаба для всех графиков. bool mDB = false; //!< Признак отображения в дБ. double mMinimum = 0; //!< Минимум отображения. double mMaximum = 1; //!< Максимум отображения. int mCurrentProviderListIndex = 0; //!< Индекс отображаемого списка провайдеров. QMap<void *, QwtPlotItem *> mItemsMap; //!< Ассоциативный массив объектов отображения графика. QList<QList<DataProvider *> > mDataProvidersListsList; //!< Список списков одновременно отображаемых провайдеров данных. Первый провайдер в каждом списке используется для отображения растрвых данных и не отображается на других графиках. QVariantList mSchemes[DimensionCount]; //!< Схемы отображения для каждой размерности. private slots: void on_widgetLegend_getProviderList(QList<DataProvider *> &); void on_widgetLegend_providersChanged(); void on_widgetLegend_setMax(double value); void on_widgetLegend_setMin(double value); void on_widgetLegend_getMax(double &value); void on_widgetLegend_getMin(double &value); void on_widgetLegend_getdB(bool &value); void on_checkboxDB_clicked(bool); void on_actionAutoCommon_triggered(); void on_actionAutoIndividual_triggered(); void on_buttonAuto_toggled(bool); void on_spinboxIndexes2_valueChanged(int); void on_spinboxIndexes2_editingFinished(); void on_spinboxDimension2Count_valueChanged(int); void on_spinboxIndex1_valueChanged(int); void on_comboboxProviders_currentIndexChanged(int); void on_plotDimension2_getTrackerText(const QPointF &point, QwtText &text); void on_plotsetContainer_schemeChanged(); void on_plotsetContainer_plotsetUpdateRequest(PlotSetWidget *); void on_plotsetContainer_plotsetInitRequest(PlotSetWidget *); void on_plotsetContainer_mousePress(PlotSetWidget *, int, QPointF, Qt::MouseButtons); void on_plotsetContainer_mouseMove(PlotSetWidget *, int, QPointF, Qt::MouseButtons); void on_plotsetContainer_mouseRelease(PlotSetWidget *, int, QPointF, Qt::MouseButtons); void on_buttonHideInfo_clicked(); void on_buttonShowInfo_clicked(); void slot_menuDimension1_triggered(QAction *); void slot_menuDimension2_triggered(QAction *); void slot_menuDimension3_triggered(QAction *); void slot_menuDimension4_triggered(QAction *); void on_buttonRotate_clicked(); void on_actionRotate2_triggered(); void on_actionRotateReset_triggered(); void slot_leftLeftPlot_drawBackground(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); void slot_leftPlot_drawBackground(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); void slot_bottomPlot_drawBackground(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); void slot_leftLeftPlot_drawForeground(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); void slot_centralPlot_drawForeground(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); void slot_leftPlot_drawForeground(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); void slot_bottomPlot_drawForeground(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); signals: /*! * \brief Запрашивает текст для отображения в панели информации. * \param text Возвращаемый текст. */ void updateInformationText(QString &text); /*! * \brief Отображает индексы в значения измерения. * \param dimension Номер измерения. * \param variant Вариант отображения индексов в значения для указанного измерения. * \param index0 Индекс измерения №0. * \param index1 Индекс измерения №1. * \param index2 Индекс измерения №2. * \param index3 Индекс измерения №3. * \param value Возвращаемое значение. */ void mapCoordinate(int dimension, int unit, double index0, double index1, double index2, double index3, double &value); /*! * \brief Запрашивает описание элемента. * \param index0 Индекс измерения №0. * \param index1 Индекс измерения №1. * \param index2 Индекс измерения №2. * \param index3 Индекс измерения №3. * \param text Возвращаемое описание. */ void describeCoordinate(double index0, double index1, double index2, double index3, QString &text); /*! * \brief Вызывается при перерисовке заднего плана графика. * \param plotID Идентификатор графика. * \param painter Объект рисования. * \param xMap Объект отображения координат оси x. * \param yMap Объект отображения координат оси y. * \param canvasRect Координаты области рисования. */ void drawPlotBackground(ArrayWidget::PlotIDs plotID, QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); /*! * \brief Вызывается при перерисовке переднего плана графика. * \param plotID Идентификатор графика. * \param painter Объект рисования. * \param xMap Объект отображения координат оси x. * \param yMap Объект отображения координат оси y. * \param canvasRect Координаты области рисования. */ void drawPlotForeground(ArrayWidget::PlotIDs plotID, QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect); }; #endif // ARRAYWIDGET_H