Саммерфилд Марк
Шрифт:
В закрытой секции класса мы объявляем несколько функций для рисования виджета, константу и несколько переменных—членов. Константа Margin применяется для обеспечения некоторого свободного пространства вокруг диаграммы.
Среди переменных—членов находится pixmap, которая имеет тип QPixmap. Эта переменная содержит копию всего виджета, идентичную его изображению на экране. График всегда сначала строится вне экрана на пиксельной карте, и затем пиксельная карта помещается на виджет.
Класс PlotSettings задает диапазон значений по осям x и y и количество отметок на этих осях. На рис. 5.8 показано соответствие между объектом PlotSettings и виджетом Plotter.
По условному соглашению значение в numXTicks и numYTicks задается на единицу меньше; если numXTicks равно 5, Plotter будет на самом деле выводить 6 отметок по оси x. Это упростит расчеты в будущем.
Рис. 5.8. Переменные—члены настроек графика PlotSettings.
Теперь давайте рассмотрим файл реализации:
Мы включаем необходимые заголовочные файлы и импортируем все символы пространства имен std в глобальное пространство имен. Это позволяет нам получать доступ к функциям, объявленным в <cmath>, без указания префикса std:: (например, floor вместо std::floor).
Вызов setBackgroundRole указывает QWidget на необходимость использования для цвета стирания виджета «темного» компонента палитры вместо компонента «window» (окно). Этим мы определяем цвет, который будет использоваться в Qt по умолчанию для заполнения любых вновь появившихся пикселей при увеличении размеров виджета прежде, чем paintEvent получит возможность рисования нового пикселя. Для включения этого механизма необходимо также вызвать setAutoFillBackground(true). (По умолчанию дочерние виджеты наследуют фон своего родительского виджета.)