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 }
Функция printBox вычерчивает контур блока, затем отображает текст внутри него.
Графические средства OpenGL
OpenGL является стандартным программным интерфейсом, предназначенным для воспроизведения графики 2D и 3D. Приложения Qt могут отображать графику 3D, используя модуль
Вывод графики при помощи OpenGL в приложении Qt выполняется достаточно просто: мы должны создать подкласс
Для демонстрации этого подхода мы рассмотрим программный код приложения Тетраэдр, показанного на рис. 8.17. Это приложение отображает в пространстве тетраэдр или четырехгранник, грани которого имеют различные цвета. Пользователь может поворачивать тетраэдр, нажимая кнопку мышки и перемещая ее. Пользователь может задавать цвет поверхности грани путем двойного щелчка с последующим выбором цвета в диалоговом окне
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 }
Класс
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 }