/
MaximU
/
arraywidget
Обзор
Документация
Войти
/
MaximU
/
arraywidget
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
qwtplotext.cpp
175 строк
5 KB
Максим
Упорядочены #include-ы.
18 июл 2026, 19:00
18 июл 2026, 19:00
8842a35
Код
Авторство
О чём код?
#include "qwtplotext.h" #include <qwt_picker_machine.h> #include <qwt_plot_layout.h> #include <qwt_plot_panner.h> /*! * \brief Конструктор. * \param parent Родительский виджет. */ QwtPlotExt::QwtPlotExt(QWidget *parent) : QwtPlot(parent) { //// Масштабирование. mZoomer1 = new QwtPlotZoomer(QwtPlot::xTop, QwtPlot::yLeft, canvas()); mZoomer2 = new QwtPlotZoomer(QwtPlot::xBottom, QwtPlot::yRight, canvas()); mZoomer1->setMaxStackDepth(3); mZoomer2->setMaxStackDepth(3); mZoomer1->setMousePattern(QwtEventPattern::MouseSelect1, Qt::LeftButton, Qt::ControlModifier); mZoomer2->setMousePattern(QwtEventPattern::MouseSelect1, Qt::LeftButton, Qt::ControlModifier); mZoomer1->setMousePattern(QwtEventPattern::MouseSelect3, Qt::RightButton); mZoomer2->setMousePattern(QwtEventPattern::MouseSelect3, Qt::RightButton); mZoomer1->setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier); mZoomer2->setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier); mZoomer1->setTrackerMode(QwtPicker::AlwaysOff); mZoomer2->setTrackerMode(QwtPicker::AlwaysOff); //// Смещение. QwtPlotPanner *panner = new QwtPlotPanner(canvas()); panner->setMouseButton(Qt::MiddleButton); //// Установка выравнивания полотна по шкалам. Без установки шкалы расширяются и не равны устанавливаемым. plotLayout()->setAlignCanvasToScales(true); //// Разрешение событий мыши. canvas()->setMouseTracking(true); } /*! * \brief Инициализирует координатную сетку графика. * \param init Признак инициализации/деинициализации. */ void QwtPlotExt::initGrid(bool init) { if (init) { if (mGrid == nullptr) { mGrid = new QwtPlotGrid(); QPen pen; pen.setColor(Qt::darkRed); pen.setStyle(Qt::DotLine); mGrid->setMajorPen(pen); mGrid->setZ(0); mGrid->attach(this); } } else { delete mGrid; mGrid = nullptr; } } /*! * \brief Инициализирует пикер отображения координат на графике. * \param xAxis Горизонтальная ось привязки пикера. * \param yAxis Вертикальная ось привязки пикера. * \param type Тип пикера. */ void QwtPlotExt::initDisplayCoordinatePicker(QwtPlot::Axis xAxis, QwtPlot::Axis yAxis, QwtPlotExt::DisplayCoordinatePickerType type) { if (type != PickerMachineNone) { delete mDisplayCoordinatePicker; mDisplayCoordinatePicker = new DisplayCoordinatePicker(xAxis, yAxis, canvas()); mDisplayCoordinatePicker->setRubberBandPen(QColor(Qt::blue)); switch (type) { case PickerClickPointMachine: mDisplayCoordinatePicker->setStateMachine(new QwtPickerClickPointMachine()); break; case PickerDragPointMachine: mDisplayCoordinatePicker->setStateMachine(new QwtPickerDragPointMachine()); break; default: break; } mDisplayCoordinatePicker->setRubberBand(QwtPicker::CrossRubberBand); mDisplayCoordinatePicker->setTrackerMode(QwtPicker::AlwaysOn); mDisplayCoordinatePicker->setEnabled(true); connect(mDisplayCoordinatePicker, &DisplayCoordinatePicker::getTrackerText, this, &QwtPlotExt::getTrackerText); } else { delete mDisplayCoordinatePicker; mDisplayCoordinatePicker = nullptr; } } /*! * \brief Устанавливает оси графика. * \param rect1 Интервалы осей left-top. * \param rect2 Интервалы осей right-bottom. */ void QwtPlotExt::setZoomBase(const QRectF &rect1, const QRectF &rect2) { //// Если зумер был изменен, то текущее состояние необходимо запомнить и после обновления осей восстановить. bool zoomed = mZoomer1->zoomRectIndex() != 0 && mZoomer2->zoomRectIndex() != 0; QRectF tmp1; QRectF tmp2; if (zoomed) { tmp1 = mZoomer1->zoomStack().last(); tmp2 = mZoomer2->zoomStack().last(); } setAxisScale(QwtPlot::xTop, rect1.left(), rect1.right()); setAxisScale(QwtPlot::yRight, rect1.top(), rect1.bottom()); setAxisScale(QwtPlot::xBottom, rect2.left(), rect2.right()); setAxisScale(QwtPlot::yLeft, rect2.top(), rect2.bottom()); mZoomer1->setZoomBase(); mZoomer2->setZoomBase(); if (zoomed) { mZoomer1->zoom(tmp1); mZoomer2->zoom(tmp2); } } /*! * \brief Сбрасывает стек масштабирования. */ void QwtPlotExt::resetZoomStack() { QwtPlotZoomer *zoomer1 = mZoomer1; QwtPlotZoomer *zoomer2 = mZoomer2; QStack<QRectF> stack1 = zoomer1->zoomStack(); QStack<QRectF> stack2 = zoomer2->zoomStack(); bool zoomed = zoomer1->zoomRectIndex() != 0 && zoomer2->zoomRectIndex() != 0; if (zoomed) { QRectF tmp1 = stack1.first(); QRectF tmp2 = stack2.first(); stack1.clear(); stack2.clear(); stack1.append(tmp1); stack2.append(tmp2); zoomer1->setZoomStack(stack1); zoomer2->setZoomStack(stack2); } }