![]() |
Главная · Все классы · Основные классы · Классы по группам · Модули · Функции | ![]() |
[Предыдущий: Урок 8] [Учебное пособие] [Следующий: Урок 10]
Файлы:
Следующий пример мы сделаем нагляднее нарисовав небольшую изящную пушку синего цвета. По сравнению с предыдущим уроком изменится только файл cannonfield.cpp.
void CannonField::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
Мы начинаем всерьез использовать QPainter. Создадим рисовальщика, действующего на этом виджете.
painter.setPen(Qt::NoPen);
Контур фигур, которые рисует QPainter, рисуются с помощью пера. Здесь мы установили его в значение Qt::NoPen, что означает отсутствие контура при рисовании.
painter.setBrush(Qt::blue);
Когда QPainter заливает цветом прямоугольник, окружность или что-либо еще, он заливает фигуру используя кисть. Здесь мы установили сплошную синюю кисть. (Также мы можем использовать палитру.) Синяя кисть будет использоваться также при рисовании контуров фигур.
painter.translate(0, rect().height());
Функция QPainter::translate() транслирует систему координат QPainter (т.е., передвигает ее на величину смещения). Здесь мы установили точку (0, 0) в верхний левый угол виджета. Размеры x и y остаются неизменными, т.е., все координаты y внутри виджета теперь отрицательные. (Дополнительную информацию о системе координат Qt смотрите в статье Система координат.)
painter.drawPie(QRect(-35, -35, 70, 70), 0, 90 * 16);
Функция QPainter::drawPie() используя начальный угол и длину дуги рисует сектор, вписанный в заданный прямоугольник. Углы задаются в шестнадцатых частях градуса. Ноль градусов соответствует 3-часовой отметке. Направление рисования - против часовой стрелки. Здесь мы нарисовали четверть окружности в верхнем левом углу виджета. Сектор не имеет границы и заливается синим цветом.
painter.rotate(-currentAngle);
Функция QPainter::rotate() вращает систему координат QPainter вокруг начала отсчета. Аргумент вращения float задается в градусах (а не в шестнадцатых долях градуса как было выше) и направлен по часовой стрелке. Здесь мы вращаем систему координат на currentAngle градусов против часовой стрелки.
painter.drawRect(QRect(30, -5, 20, 10));
Функция QPainter::drawRect() рисует заданный прямоугольник. Нарисуем ствол пушки.
Часто бывает трудно представить себе результат рисования когда система координат была преобразована (транслирована, повернута, масштабирована или сдвинута) как это сделано выше.
В этом случае система координат сначала транслируется, а затем поворачивается. Если прямоугольник QRect(30, -5, 20, 10) нарисован в транслированной системе координат, то он будет выглядеть примерно так:
Обратите внимание на то, что прямоугольник ограничен границей виджета CannonField. Когда мы поворачиваем систему координат, например на 60 градусов, прямоугольник будет повернут вокруг точки (0, 0), которая находится в верхнем левом углу поскольку мы транслировали систему координат. Результат выглядит так:
При работе с ползунком соответственно изменяется и угол возвышения пушки.
Буква 'Q' в кнопке Quit теперь подчеркнута, а сочетание клавиш Alt+Q вызывает нажатие кнопки.
Установите другое перо вместо Qt::NoPen. Установите узорчатую (patterned) кисть.
Попробуйте в качестве текста кнопки "Q&uit" либо "Qu&it" вместо "&Quit". Что произойдет?
[Предыдущий: Урок 8] [Учебное пособие] [Следующий: Урок 10]
Copyright © 2008 Trolltech | Торговые марки | Qt 4.3.5 |