Читаем QT 4: программирование GUI на С++ полностью

04 painter->setFont(font);

05 int boxWidth = painter->window.width;

06 int textWidth = boxWidth - 2 * SmallGap;

07 int maxHeight = painter->window.height;

08 QRect textRect = painter->boundingRect(SmallGap, SmallGap,

09 textWidth, maxHeight, Qt::TextWordWrap, str);

10 int boxHeight = textRect.height + 2 * SmallGap;

11 painter->setPen(QPen(Qt::black, 2, Qt::SolidLine));

12 painter->setBrush(brush);

13 painter->drawRect(0, 0, boxWidth, boxHeight);

14 painter->drawText(textRect, Qt::TextWordWrap, str);

15 painter->translate(0, boxHeight);

16 }

Рис. 8.16. Компоновка страницы справочника по цветам.

Функция printBox вычерчивает контур блока, затем отображает текст внутри него.

<p>Графические средства OpenGL</p>

OpenGL является стандартным программным интерфейсом, предназначенным для воспроизведения графики 2D и 3D. Приложения Qt могут отображать графику 3D, используя модуль QtOpenGL, который рассчитан на применение системной библиотеки OpenGL. При изложении данного раздела предполагается, что вы знакомы с OpenGL. Если вы не знакомы с OpenGL, хорошо начинать его изучение с посещения сайта http://www.opengl.org/.

Рис. 8.17. Приложение Тетраэдр.

Вывод графики при помощи OpenGL в приложении Qt выполняется достаточно просто: мы должны создать подкласс QGLWidget, переопределить несколько виртуальных функций и собрать приложение вместе с библиотеками QtOpenGL и OpenGL. Из-за того, что QGLWidget наследует QWidget, большая часть наших знаний остается применимой и здесь. Основное отличие заключается в том, что вместо QPainter для выполнения графических операций мы используем стандартные функции библиотеки OpenGL.

Для демонстрации этого подхода мы рассмотрим программный код приложения Тетраэдр, показанного на рис. 8.17. Это приложение отображает в пространстве тетраэдр или четырехгранник, грани которого имеют различные цвета. Пользователь может поворачивать тетраэдр, нажимая кнопку мышки и перемещая ее. Пользователь может задавать цвет поверхности грани путем двойного щелчка с последующим выбором цвета в диалоговом окне QColorDialog, которое выдается на экран.

01 class Tetrahedron : public QGLWidget

02 {

03 Q_OBJECT

04 public:

05 Tetrahedron(QWidget *parent = 0);

06 protected:

07 void initializeGL;

08 void resizeGL(int width, int height);

09 void paintGL;

10 void mousePressEvent(QMouseEvent *event);

11 void mouseMoveEvent(QMouseEvent *event);

12 void mouseDoubleClickEvent(QMouseEvent *event);

13 private:

14 void draw;

15 int faceAtPosition(const QPoint &pos);

16 GLfloat rotationX;

17 GLfloat rotationY;

18 GLfloat rotationZ;

19 QColor faceColors[4];

20 QPoint lastPos;

21 }

Класс Tetrahedron наследует QGLWidget. Функции класса QGLWidget initializeGL, resizeGL и paintGL переопределяются. Обработчики событий мышки класса QWidget переопределяются обычным образом.

01 Tetrahedron::Tetrahedron(QWidget *parent)

02 : QGLWidget(parent)

03 {

04 setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer)

05 rotationX = -21.0;

06 rotationY = -57.0;

07 rotationZ = 0.0;

08 faceColors[0] = Qt::red;

09 faceColors[1] = Qt::green;

10 faceColors[2] = Qt::blue;

11 faceColors[3] = Qt::yellow;

12 }

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже