QT 4: программирование GUI на С++
Шрифт:
Вызов в конце функции setPlotSettings завершает инициализацию.
Функция setPlotSettings устанавливает настройки PlotSettings для отображения
• zoomStack содержит настройки для различных масштабов изображения в объекте QVector<PlotSettings>;
• curZoom содержит индекс текущего элемента PlotSettings стека zoomStack.
После вызова функции setPlotSettings в стеке масштабов изображений будет находиться только один элемент, а кнопки Zoom In и Zoom Out будут скрыты. Эти кнопки не будут видны на экране до тех пор, пока мы не вызовем для них функцию show в слотах zoomIn и zoomOut. (Обычно для показа всех дочерних виджетов достаточно вызвать функцию show для виджета верхнего уровня. Но когда мы явным образом вызываем для дочернего виджета функцию hide, этот виджет будет скрыт до вызова для него функции show.)
Вызов функции refreshPixmap необходим для обновления изображения на экране. Обычно мы вызываем функцию update, но здесь мы поступаем немного по-другому, потому что хотим иметь пиксельную карту QPixmap постоянно в обновленном состоянии. После регенерации пиксельной карты функция refreshPixmap вызывает update для помещения пиксельной карты на виджет.
Слот zoomOut уменьшает масштаб диаграммы, если она отображена крупным планом. Он уменьшает на единицу текущий масштаб изображения и включает или выключает кнопку ZoomOut, в зависимости от возможности дальнейшего уменьшения диаграммы. Кнопка Zoom In включается и отображается на экране, а изображение диаграммы обновляется посредством вызова функции refreshPixmap.
Если пользователь
сначала увеличил изображение, а затем вновь его уменьшил, настройки PlotSettings для следующего масштаба изображения уже будут в стеке масштабов изображения, и мы можем увеличить его. (В противном случае можно все же увеличить изображение при помощи резиновой ленты.)Слот увеличивает на единицу значение curZoom для перехода на один уровень вглубь стека масштабов изображения, включает или выключает кнопку Zoom In взависимости от возможности дальнейшего увеличения изображения и включает и показывает кнопку Zoom Out. И вновь мы вызываем refreshPixmap для использования построителем графиков настроек самого последнего масштаба изображения.
Функция setCurveData устанавливает данные для кривой с заданным идентификатором. Если в curveMap уже имеется кривая с таким идентификатором, ее данные заменяются новыми значениями; в противном случае просто добавляется новая кривая. Переменная—член curveMap имеет тип QMap<int, QVector<QPointF> >.
Функция clearCurve удаляет заданную кривую из curveMap.
Функция minimumSizeHint напоминает sizeHint; в то время как функция sizeHint устанавливает идеальный размер виджета, minimumSizeHint задает идеальный минимальный размер виджета. Менеджер компоновки никогда не станет задавать виджету размеры ниже идеального минимального размера.
Мы возвращаем значение 300 × 200 (поскольку Margin равен 50) для того, чтобы можно было разместить окаймляющую кромку по всем четырем сторонам и обеспечить некоторое пространство для самого графика. При меньших размерах считается, что график будет слишком мал и бесполезен.
В функции sizeHint мы возвращаем «идеальный» размер относительно константы Margin, причем горизонтальный и вертикальный компоненты этого размера составляют ту же самую приятную для глаза пропорцию 3:2, которую мы использовали для minimumSizeHint.
Мы завершаем рассмотрение открытых функций и слотов построителя графиков Plotter. Теперь давайте рассмотрим защищенные обработчики событий.