Жасмин Бланшет

Книги → QT 4: программирование GUI на С++ → Двойная буферизация

22 protected:

23 void paintEvent(QPaintEvent *event);

24 void resizeEvent(QResizeEvent *event);

25 void mousePressEvent(QMouseEvent *event);

26 void mouseMoveEvent(QMouseEvent *event);

27 void mouseReleaseEvent(QMouseEvent *event);

28 void keyPressEvent(QKeyEvent *event);

29 void wheelEvent(QWheelEvent *event);

В защищенной секции класса мы объявляем все обработчики событий QWidget, которые хотим переопределить.

30 private:

31 void updateRubberBandRegion();

32 void refreshPixmap();

33 void drawGrid(QPainter *painter);

34 void drawCurves(QPainter *painter);

35 enum { Margin = 50 };

36 QToolButton *zoomInButton;

37 QToolButton *zoomOutButton;

38 QMap<int, QVector<QPointF> > curveMap;

39 QVector<PlotSettings> zoomStack;

40 int curZoom;

41 bool rubberBandIsShown;

42 QRect rubberBandRect;

43 QPixmap pixmap;

44 };

В закрытой секции класса мы объявляем несколько функций для рисования виджета, константу и несколько переменных—членов. Константа Margin применяется для обеспечения некоторого свободного пространства вокруг диаграммы.

Среди переменных—членов находится pixmap, которая имеет тип QPixmap. Эта переменная содержит копию всего виджета, идентичную его изображению на экране. График всегда сначала строится вне экрана на пиксельной карте, и затем пиксельная карта помещается на виджет.

45 class PlotSettings

46 {

47 public:

48 PlotSettings();

49 void scroll(int dx, int dy);

50 void adjust();

51 double spanX() const { return maxX - minX; }

52 double spanY() const { return maxY - minY; }

53 double minX;

54 double maxX;

55 int numXTicks;

56 double minY;

57 double maxY;

58 int numYTicks;

59 private:

60 static void adjustAxis(double &min, double &max, int &numTicks);

61 };

62 #endif

Класс PlotSettings задает диапазон значений по осям x и y и количество отметок на этих осях. На рис. 5.8 показано соответствие между объектом PlotSettings и виджетом Plotter.

По условному соглашению значение в numXTicks и numYTicks задается на единицу меньше; если numXTicks равно 5, Plotter будет на самом деле выводить 6 отметок по оси x. Это упростит расчеты в будущем.

Рис. 5.8. Переменные—члены настроек графика PlotSettings.

Теперь давайте рассмотрим файл реализации:

001 #include <QtGui>

002 #include <cmath>

003 #include "plotter.h"

Мы включаем необходимые заголовочные файлы и импортируем все символы пространства имен std в глобальное пространство имен. Это позволяет нам получать доступ к функциям, объявленным в <cmath>, без указания префикса std:: (например, floor() вместо std::floor()).

004 Plotter::Plotter(QWidget *parent)

005 : QWidget(parent)

006 {

← предыдущая следующая →

Страницы раздела: 1 2 3 4 5 6 7 8 9 10 11 12 13

Публикация компанией Dropbox кода Zulip – средства общения для IT-разработчиков

20.11.2015
Одной из одобрительно встреченных программистами инициатив, реализующихся в рамках акции Hack Week, стала публикация исходного кода приложения Zulip – веб-приложения для общения между собой разработчиков в сфере IT-технологий.

Объединение ОС Android и Chrome

17.11.2015
Слухи об объединении двух крупнейших ОС компании Google, Android и Chrome, гуляют по Интернету уже более 5 лет, но до сих пор этого не случилось, хотя очевидно, что с течением времени эти ОС становятся всё более похожими: так, в последнее время появилось немало Android-устройств, к которым прилагаются клавиатуры, а Chrome OS «научилась» работать с сенсорными экранами.

Конференция Linux Piter 2015

15.11.2015
Уже почти через неделю в Санкт-Петербурге впервые в истории пройдёт конференция, посвящённая проблемам свободного программного обеспечения – Linux Piter 2015.