QChartView Class
A chart view does not require a QGraphicsScene object to work. To display a chart in an existing QGraphicsScene, the QChart or QPolarChart class should be used instead.
Member Type Documentation
[since 6.2] enum QChartView:: RubberBand
flags QChartView:: RubberBands
This enum describes the different types of rubber band effects that can be applied to the rectangular zooming area.
| Constant | Value | Description |
|---|---|---|
| QChartView::NoRubberBand | 0x0 | No zooming area is specified, and therefore zooming is not enabled. |
| QChartView::VerticalRubberBand | 0x1 | The rubber band is locked to the size of the chart horizontally and can be pulled vertically to specify the zooming area. |
| QChartView::HorizontalRubberBand | 0x2 | The rubber band is locked to the size of the chart vertically and can be pulled horizontally to specify the zooming area. |
| QChartView::RectangleRubberBand | 0x3 | The rubber band is fixed to the point that was clicked and can be pulled both vertically and horizontally. |
| QChartView::ClickThroughRubberBand | 0x80 | An option on the above rubber band choices that allows left clicks to be passed on to chart items if those chart items accept clicks. To select this, OR it with one of the rubber band selection modes. |
This enum was introduced in Qt 6.2.
The RubberBands type is a typedef for QFlags. It stores an OR combination of RubberBand values.
Member Function Documentation
[explicit] QChartView:: QChartView ( QWidget *parent = nullptr)
Constructs a chart view object with the parent parent.
[explicit] QChartView:: QChartView ( QChart *chart, QWidget *parent = nullptr)
Constructs a chart view object with the parent parent to display the chart chart. The ownership of the chart is passed to the chart view.
[virtual noexcept] QChartView:: ~QChartView ()
Deletes the chart view object and the associated chart.
QChart *QChartView:: chart () const
Returns the pointer to the associated chart.
[override virtual protected] void QChartView:: mouseMoveEvent ( QMouseEvent *event)
If the rubber band rectangle is displayed in the press event specified by event, the event data is used to update the rubber band geometry. Otherwise, the default QGraphicsView::mouseMoveEvent() implementation is called.
[override virtual protected] void QChartView:: mousePressEvent ( QMouseEvent *event)
If the left mouse button is pressed and the rubber band is enabled, the event event is accepted and the rubber band is displayed on the screen. This enables the user to select the zoom area.
If some other mouse button is pressed or the rubber band is disabled, the event is passed to QGraphicsView::mousePressEvent().
[override virtual protected] void QChartView:: mouseReleaseEvent ( QMouseEvent *event)
If the left mouse button is released and the rubber band is enabled, the event event is accepted and the view is zoomed into the rectangle specified by the rubber band. If releasing the right mouse button triggered the event, the view is zoomed out.
[override virtual protected] void QChartView:: resizeEvent ( QResizeEvent *event)
Resizes and updates the chart area using the data specified by event.
QChartView::RubberBands QChartView:: rubberBand () const
Returns the rubber band flags that are currently being used by the chart view.
void QChartView:: setChart ( QChart *chart)
Sets the current chart to chart. The ownership of the new chart is passed to the chart view and the ownership of the previous chart is released.
To avoid memory leaks, the previous chart must be deleted.
void QChartView:: setRubberBand (const QChartView::RubberBands &rubberBand)
Sets the rubber band flags to rubberBand. The selected flags determine the way zooming is performed.
Note: Rubber band zooming is not supported for polar charts.
© 2023 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
Введение в работу с гистограммами в Qt
Гистограмма представляет данные в виде горизонтальных или вертикальных полос, сгруппированных по категориям. Рассмотрим, как с помощью гистограммы можно визуализировать данные в приложении, использующем фреймворк C++/Qt и его модуль Qt Charts.
Добавление модуля Qt Charts в проект
Во-первых, включаем использование модуля Qt Charts в qmake-файле проекта.
QT += charts
А в исходном файле используем следующие директивы include и using :
#include using namespace QtCharts;
Создание гистограммы
Для простоты всё создание диаграммы выполним в конструкторе объекта класса, который наследуется от QMainWindow .
Данные, которые визуализирует гистограмма, определяются экземплярами класса QBarSet . Объект QBarSet представляет один набор полос на гистограмме.
Сначала мы создаем наборы и добавляем к ним данные. Данные добавляются с помощью оператора
QBarSet *centralFedDistr = new QBarSet("Центральный"); QBarSet *northwesternDistr = new QBarSet("Северо-Западный"); QBarSet *southerhFedDistr = new QBarSet("Южный"); QBarSet *northCaucasianFedDistr = new QBarSet("Северо-Кавказский"); QBarSet *volgaFedDistr = new QBarSet("Приволжский"); QBarSet *uralFedDistr = new QBarSet("Уральский"); QBarSet *siberianFedDistr = new QBarSet("Сибирский"); QBarSet *farEasternFedDistr = new QBarSet("Дальневосточный"); *centralFedDistr
Затем создаем последовательность полос (объект класса QBarSeries ) и добавляем в нее наборы данных. Последовательность становится владельцем наборов полос. В последовательности данные из наборов группируются в категории. Первые значения каждого набора сгруппированы вместе в первой категории, вторые значения – во второй категории, и так далее.
Класс последовательности определяет способ представления данных:
- класс QBarSeries представляет данные в виде вертикальных полос;
- класс QHorizontalBarSeries представляет данные в виде горизонтальных полос.
В данном примере мы используем вертикальное представление.
QBarSeries *series = new QBarSeries(); series->append(centralFedDistr); series->append(northwesternDistr); series->append(southerhFedDistr); series->append(northCaucasianFedDistr); series->append(volgaFedDistr); series->append(uralFedDistr); series->append(siberianFedDistr); series->append(farEasternFedDistr);
Далее создаем объект диаграммы класса QChart и добавляем к нему последовательность полос. Устанавливаем заголовок для диаграммы с помощью метода setTitle() , а затем включаем анимацию последовательности полос, вызывая метод setAnimationOptions(QChart::SeriesAnimations) .
QChart *chart = new QChart(); chart->addSeries(series); chart->setTitle("Среднесписочная численность работников предприятий малого и среднего бизнеса по федеральным округам"); chart->setAnimationOptions(QChart::SeriesAnimations);
Чтобы на оси отображались категории, нам нужно создать объект QBarCategoryAxis . Здесь мы создаем ось категорий со списком категорий и устанавливаем ее выравнивание по нижнему краю, чтобы она действовала как ось x, и присоединяем ее к последовательности полос series . Диаграмма, объект chart , становится владельцем оси. Для оси y мы используем ось значений, выровненную по левому краю.
QStringList categories; categories append(categories); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); QValueAxis *axisY = new QValueAxis(); axisY->setRange(0,4000); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY);
Мы также хотим показать легенду диаграммы. Для этого берем от диаграммы (объекта chart ) указатель на легенду (объект класса QLegend ) и делаем ее видимой. А затем помещаем легенду в правую часть диаграммы, задав для ее выравнивания значение Qt::AlignRight .
chart->legend()->setVisible(true); chart->legend()->setAlignment(Qt::AlignRight);
И, наконец, мы добавляем диаграмму в представление. И включаем сглаживание для chartView .
QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing);
Теперь диаграмма готова к показу. Мы устанавливаем диаграмму как центральный виджет окна. И изменяем размеры окна.
setCentralWidget(chartView); resize(800, 400);
В результате получаем гистограмму следующего вида:
Изменение внешнего вида гистограммы
Можно заметить, что цвета полос, начиная с шестой (Уральский федеральный округ), начинают повторяться, причем с пониженной яркостью.
Чтобы решить эту проблему, можно вручную установить цвет для определенного набора полос (объекта QBarSet ) с помощью метода QBarSet::setLabelBrush(const QBrush &brush) . Для примера немного упростим задачу и извлечем список наборов полос из объекта последовательности полос и каждому набору установим «случайный» цвет.
QList sets = series->barSets(); float currentHue = 0.0; for(int i = 0; i < sets.size(); ++i) < QColor col = QColor::fromHslF(currentHue, 0.7, 0.5); currentHue += 0.618033988749895f; currentHue = std::fmod(currentHue, 1.0f); sets[i]->setColor(col); >
В итоге получаем следующую гистограмму:

Исходный код
Полный исходный код проекта доступен на GitHub.
Также ниже приведен код исходного файла mainwindow.cpp и, в частности, конструктора, котором создается гистограмма.
#include "mainwindow.h" #include #include using namespace QtCharts; //--------------------------------------------------------------------------------------- MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) < QBarSet *centralFedDistr = new QBarSet("Центральный"); QBarSet *northwesternDistr = new QBarSet("Северо-Западный"); QBarSet *southerhFedDistr = new QBarSet("Южный"); QBarSet *northCaucasianFedDistr = new QBarSet("Северо-Кавказский"); QBarSet *volgaFedDistr = new QBarSet("Приволжский"); QBarSet *uralFedDistr = new QBarSet("Уральский"); QBarSet *siberianFedDistr = new QBarSet("Сибирский"); QBarSet *farEasternFedDistr = new QBarSet("Дальневосточный"); *centralFedDistr append(centralFedDistr); series->append(northwesternDistr); series->append(southerhFedDistr); series->append(northCaucasianFedDistr); series->append(volgaFedDistr); series->append(uralFedDistr); series->append(siberianFedDistr); series->append(farEasternFedDistr); QList sets = series->barSets(); float currentHue = 0.0; for(int i = 0; i < sets.size(); ++i) < QColor col = QColor::fromHslF(currentHue, 0.7, 0.5); currentHue += 0.618033988749895f; currentHue = std::fmod(currentHue, 1.0f); sets[i]->setColor(col); > QChart *chart = new QChart(); chart->addSeries(series); chart->setTitle("Среднесписочная численность работников предприятий малого и среднего бизнеса по федеральным округам"); chart->setAnimationOptions(QChart::SeriesAnimations); QStringList categories; categories append(categories); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); QValueAxis *axisY = new QValueAxis(); axisY->setRange(0,4000); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY); chart->legend()->setVisible(true); chart->legend()->setAlignment(Qt::AlignRight); QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); setCentralWidget(chartView); resize(800, 400); > //--------------------------------------------------------------------------------------- MainWindow::~MainWindow() < >//---------------------------------------------------------------------------------------
Теги
Сохранить или поделиться
На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.
В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.
Qt/C++ - Урок 071. Динамическое создание графиков с QtCharts.

Разберём вариант создания графиков, когда необходимо добавлять большое количество графиков, которые создаются динамически. Подобный урок уже был в статье по динамическому созданию виджетов, только там добавлялись кнопки QPushButton . Здесь применяется тот же самый вариант работы. Выделяется память в куче, производится настройка виджета с графиком, и виджет добавляет в QScrollArea или QLayout, чтобы отобразить сам график в окне приложения. Приложение будет выглядеть следующим образом: В данном примере будет добавляться 5 графиков в горизонтальный Layout ( QHBoxLayout ). Также в примере будет добавлена всплывающая подсказка, которая содержит некоторую информацию. Например, номер графика и количество отсчётов.
Структура проекта
- Graphs.pro - профайл проекта;
- widget.h - заголовочный файл окна приложения;
- widget.cpp - файл исходных кодов окна приложения;
- widget.ui - форма окна приложения;
- main.cpp - файл с main функцией.
main.cpp создаётся по умолчанию и не изменяется в проекте. В файле widget.ui необходимо только создать размещение QHBoxLayout . Сделать это можно через графический дизайнер Qt.
В профайле проекта необходимо подключить модуль charts (он должен быть предварительно установлен, в виде предкомпилированных библиотек QtCharts доступен с версии Qt5.7).
QT += chartsВ заголовочном файле widget.h не производится никаких дополнительных изменений. Весь код будет содержаться в файле widget.cpp.
widget.h
#ifndef WIDGET_H #define WIDGET_H #include namespace Ui < class Widget; >class Widget : public QWidget < Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; >; #endif // WIDGET_Hwidget.cpp
#include "widget.h" #include "ui_widget.h" #include #include #include #include #include #include static int randomBetween(int low, int high, int seed) < qsrand(seed); // Установка базового числа для отсчёта рандома в qrand return (qrand() % ((high + 1) - low) + low); >using namespace QtCharts; Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) < ui->setupUi(this); // Инициализирующее число для установки базы рандома в qrand int seed = 0; for (int i = 0; i < 5; ++i) < // Создаём представление графика QChartView *chartView = new QChartView(this); // Добавляем его в горизонтальный Layout ui->horizontalLayout->addWidget(chartView); // Создаём случайную синусоиду seed = randomBetween(0, 100, seed); QLineSeries *series = new QLineSeries(); int k = 0; while (k // Создаём график и добавляем в него синусоиду QChart *chart = new QChart(); chart->addSeries(series); chart->legend()->hide(); chart->setTitle("Graphic"); // Добавим всплывающую подсказку для графика chart->setToolTip(QString("График №%1\n" "Количество отсчётов %2").arg(i + 1).arg(k)); // Настройка осей графика QValueAxis *axisX = new QValueAxis(); axisX->setTitleText("x, м"); axisX->setLabelFormat("%i"); axisX->setTickCount(1); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); QValueAxis *axisY = new QValueAxis(); axisY->setTitleText("t, мс"); axisY->setLabelFormat("%g"); axisY->setTickCount(5); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY); // Устанавливаем график в представление chartView->setChart(chart); > > Widget::~Widget()
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Рекомендуемые статьи по этой тематике
- Qt/C++ - Урок 031. QCustomPlot - строим график по времени
- Qt/C++ - Урок 032. Сохранение изображения в файл из QCustomPlot
- Qt/C++ - Урок 030. QCustomPlot - быстрый старт в работе с графиками
- Qt/C++ - Урок 014. Динамическое создание виджетов в Qt
По статье задано0 вопрос(ов)
Подписка на обсуждение 4
Подписка на раздел 341
Вам это нравится? Поделитесь в социальных сетях!
В поддержку Qt
Нетрудно представить практическую задачу, при решении которой потребуется синхронизация горизонтальной оси (как правило, это ось времени) нескольких графиков. Это означает, что если изменяется масштаб на одном из графиков, немедленно должен измениться масштаб горизонтальной оси всех остальных графиков, синхронизированных с ним.
В ранее опубликованной статье рассмотрен класс QwtChartZoom , обеспечивающий интерфейс масштабирования и перемещения графика QwtPlot в стиле TChart из библиотеки компонентов Delphi и C++Builder. Напомню, что выделение области, определяющей новые границы графика, в этом интерфейсе производится левой кнопкой мыши движением слева направо и сверху вниз. При отпускании левой кнопкой мыши график изменяет свой масштаб. Если попытаться выделить область в противоположном направлении, то при отпускании кнопки мыши границы графика вернутся к исходному состоянию. Перемещение графика (причем в любом направлении) производится при нажатой правой кнопке мыши.
Класс QwtChartZoom и его дополнения был взят за основу при разработке интерфейса синхронного масштабирования нескольких графиков. Разработанный класс получил название QChartSynZoom . Кроме того, имеется два класса QWheelSynZoomSvc и QAxisSynZoomSvc , выполняющие ту же функцию, что и аналогичные дополнения к классу QwtChartZoom . Первый поддерживает изменение масштаба вращением колеса мыши при нажатой клавише или . Если нажата клавиша , то масштабирование производится и по вертикольной оси, и по горизонтальной. Если нажат левый , то изменяется масштаб только по вертикальной шкале, если правый , только по горизонтальной. Второй класс QAxisSynZoomSvc позволяет изменять одну из границ шкалы, путем ее перетаскивания мышью.
Следует отметить, что на класс QChartSynZoom кроме синхронного изменения границ горизонтальной шкалы графиков возложена подгонка ширины виджетов, на которых изображаются вертикальная шкала слева и справа от графиков, так чтобы границы канвы всех графиков совпадали. Если метки, нанесенные на вертикальную шкалу какого-либо графика, требуют для прорисовки меньше места, чем метки на аналогичной шкале других графиков, то ширина виджета этой шкалы должна быть принудительно увеличена до требуемого размера. Эту ситуацию иллюстрирует рисунок
Поскольку графики с синхронизированной горизонтальной шкалой должны располагаться один под другим, то хорошей, но необязательной к исполнению, идеей является поместить графики в контейнер QSplitter . Класс QChartSynZoom имеет вариант конструктора, в котором указатель на QSplitter присутствует в качестве аргумента. Это дает возможность интерфейсу масштабирования отслеживать дополнительные события от контейнера и корректно настраивать вид графиков. К сожалению в дизайнере форм в палитре компонентов отсутствует QSplitter , поэтому прописывать его в файл формы *.ui приходится вручную. О том, как это сделать, можно прочитать здесь.
Порядок подключения интерфейса QwtChartSynZoom не сильно отличается от порядка подключения QwtChartZoom , поэтому дальнейшие инструкции во многом повторяют приведенные в вышеупомянутой статье.
Пусть на форме главного окна приложения имеется контейнер QSplitter , а в нем размещены 3 графика с именами plot1 , plot2 и plot3 . (Как уже отмечалось, использовать QSplitter не обязательно.) Ниже приведены заголовочный файл и файл реализации класса MainWindow .
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
Место для размещения дополнительных директив #include
namespace Ui class MainWindow ;
>
class MainWindow : public QMainWindow Q_OBJECT
public :
MainWindow ( QWidget *parent = 0 );
~MainWindow();
private :
Ui :: MainWindow * ui ;
Место для размещения для указатей на элементы графика, менеджер масштабирования и его дополнения
>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow :: MainWindow ( QWidget *parent) :
QMainWindow (parent),
ui ( new Ui :: MainWindow )
ui ->setupUi( this );
Место для размещения инструкций наполнения графика, подключения менеджера масштабирования и его дополнений
MainWindow ::~MainWindow()
Место для размещения инструкций удаления менеджера масштабирования, его дополнений и элементов графика
Если форма разрабатывалась с помощью Qt Designer, то класс MainWindow определен в пространстве имен Ui , и доступ ко всем элементам формы осуществляется через указатель ui : например, ui->plot1 . Пустые графики создаются при выполнении инструкции ui->setupUi(this) в конструкторе главного окна приложения. Далее следует наполнение графиков: создаются кривые с данными, устанавливаются свойства шкал и т.п. (пример оформления графика приведен в посвященной этому вопросу статье). После перестроения графиков здесь же в конструкторе создается менеджер синхронного масштабирования экземпляр класса QChartSynZoom вместе с дополнениями QWheelSynZoomSvc и QAxisSynZoomSvc . Понятно, что в свой проект надо добавить файлы, реализующие эти классы. В деструкторе перед удалением объектов из пространства имен Ui командой delete ui сначала удаляются менеджер масштабирования и его дополнения, а также все элементы графика, созданные в конструкторе командой new . Для того чтобы иметь доступ к этим элементам в деструкторе, указатели на них должны являться членами класса MainWindow и быть объявленными в заголовочном файле.
Таким образом, последовательность подключения интерфейса QChartSynZoom следующая
1. Копируем в папку со своим проектом файлы "qchartsynzoom.h" , "qchartsynzoom.cpp" , "qwheelsynzoomsvc.h" , "qwheelsynzoomsvc.cpp" , "qaxissynzoomsvc.h" и "qaxissynzoomsvc.cpp" , которые доступны по ссылке. Если какое-то из дополений QWheelSynZoomSvc или QAxisSynZoomSvc не планируется использовать в проекте, то понятно, что файлы этого класса копировать не надо.
2. Добавляем скопированные файлы в свой проект
SOURCES += qchartsynzoom.cpp\
qwheelsynzoomsvc.cpp\
qaxissynzoomsvc.cpp
HEADERS += qchartsynzoom.h\
qwheelsynzoomsvc.h\
qaxissynzoomsvc.h
Опять же, заголовочные файлы и файлы исходного кода классов QWheelSynZoomSvc и QAxisSynZoomSvc необходимо добавлять в проект только в том случае, если запланировано их использовать.
3. В заголовочный файл "mainwindow.h" включаем дополнительные директивы #include
#include "qchartsynzoom.h"
#include "qwheelsynzoomsvc.h" (если надо)
#include "qaxissynzoomsvc.h" (если надо)
4. В секции private объявляем указатели на менеджер масштабирования и перемещения графика
и его дополнения
QWheelSynZoomSvc * whlzmsvc ; (если надо)
QAxisSynZoomSvc * axzmsvc ; (если надо)
5. В конструкторе главного окна приложения (файл "mainwindow.cpp" ) создаем экземпляр класса QChartSynZoom , и, если необходимо, переопределяем цвет каймы выделяемой области, задающей новый масштаб графика
zoom = new QChartSynZoom ( ui -> splitter );
zoom ->setRubberBandColor( Qt :: white );
Обратите внимание на то, что указатель на контейнер QSplitter присутствует в качестве аргумента в конструкторе. Как уже отмечалось, это дает возможность интерфейсу масштабирования отслеживать дополнительные события от него и корректно настраивать вид графиков. Если же класс QSplitter не используется, и графики выровнены один под другим с помощью иных средств, то экземпляр класса QChartSynZoom создается без указания аргумента
zoom = new QChartSynZoom ();
Далее графики отдаются под опеку менеджера масштабирования с помощью вызова функции appendPlot()
zoom ->appendPlot( ui -> plot1 );
zoom ->appendPlot( ui -> plot2 );
zoom ->appendPlot( ui -> plot3 );
Здесь же, если запланировано, создаем экземпляр класса QWheelSynZoomSvc , и прикрепляем его к менеджеру масштабирования
whlzmsvc = new QWheelSynZoomSvc ();
whlzmsvc ->attach( zoom );
Далее, если запланировано, создаем экземпляр класса QAxisSynZoomSvc , и прикрепляем его к менеджеру масштабирования
axzmsvc = new QAxisSynZoomSvc ();
axzmsvc ->attach( zoom );
6. В деструктор вставляем команды удаления объектов
delete axzmsvc ; (если надо)
delete whlzmsvc ; (если надо)
delete zoom ;
Готовый проект с подключенным интерфейсом доступен по ссылке. Проект, в котором не используется QSplitter , можно взять здесь. Для дополнительной демонстрации в интерфейсе масштабирования в этом проекте включен "легкий" режим.
Перечислим имеющиеся функции управления интерфейсом и его дополнениями
void QChartSynZoom ::appendPlot( QwtPlot )
Добавляет под опеку график. Количество опекаемых графиков ограничено только вертикальным размером экрана.
void QChartSynZoom ::fixBoundaries()
Фиксирует текущие границы графика в качестве исходных. Отмена масштабирования будет возвращать график имеено к этим границам.
void QChartSynZoom ::setRubberBandColor( QColor )
Устанавливает цвет каймы выделяемой области, задающей новый размер графика, (по умолчанию черный).
void QChartSynZoom ::setLightMode( bool )
Включает/выключает "легкий" режим перемещения графика (по умолчанию выключен).
void QChart Syn Zoom ::indicateDragBand( QChart Syn Zoom :: QDragIndiStyle )
Задает стиль индикатора перемещения графика в "легком" режиме. Аргумент может принимать значения
QChartSynZoom::disNone индикация отключена;
QChartSynZoom::disSimple упрощенная индикация;
QChartSynZoom::disDetailed подробная индикация.
(По умолчанию задан стиль QChartSynZoom::disSimple .)
void QwtChartSynZoom ::setDragBandColor( QColor )
Устанавливает цвет индикатора перемещения графика в "легком" режиме (по умолчанию черный).
void QWheelSynZoomSvc ::attach( QChartSynZoom * )
Подключает дополнение QWheelSynZoomSvc к интерфейсу масштабирования.
void QWheelSynZoomSvc ::setWheelFactor( double )
Задает коэффициент масштабирования графика при вращении колеса мыши (по умолчанию коэффициент равен 1.2).
void QAxisSynZoomSvc ::attach( QChartSynZoom * )
Подключает дополнение QAxisSynZoomSvc к интерфейсу масштабирования.
void QAxisSynZoomSvc ::setLightMode( bool )
Включает/выключает "легкий" режим изменения границы шкалы (по умолчанию выключен).
void QAxisSynZoomSvc ::indicateDragBand( bool )
Включает/выключает индикацию изменения границы шкалы в "легком" режиме (по умолчанию индикация включена).
void QAxisSynZoomSvc ::setAxisRubberBandColor( QColor )
Устанавливает цвет индикатора изменения границы шкалы в "легком" режиме (по умолчанию черный).
Как видим, для работы на слабых компьютерах предусмотрен "легкий" режим интерфейса, подобно тому, как это реализовано для класса QChartSynZoom .
Замечание. Если под опеку синхронного менеджера масштабирования добавить всего один график, то внешне все будет выглядеть также как и при использовании класса QwtChartZoom . Более того, опекаемый график можно указать в качестве аргумента непосредственно в при создании экземпляра класса QChartSynZoom , например так
zoom = new QChartSynZoom ( ui -> myPlot );
Таким образом, класс QwtChartZoom сохраняет право на существование только для того, чтобы сэкономить размер генерируемого кода.


