Russian Qt Forum
Ноябрь 03, 2024, 00:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPainter::fillRect  (Прочитано 8524 раз)
cresta
Гость
« : Июль 10, 2007, 11:53 »

Здравствуйте. Пробую нарисовать на окне периодически обновляющийся текст. Текст рисуется, но предыдущий текст почему-то не затирается, и получается, что текст накладывается поверх предыдущего.
Почему? разве fillRect не должен затереть рект перед выводом текста?
       
       
Код:
 s.sprintf("%02d:%02d:%02d / %02d:%02d:%02d", hours, min, sec, hoursD, minD, secD );
       
        QPainter p(this);
       
        p.end();
        p.begin( this );
        p.setPen( Qt::white );
        p.fillRect(30,30,200,30,backgroundColor());
        p.drawText ( 30, 30, s );
        p.end();
Записан
SABROG
Гость
« Ответ #1 : Июль 10, 2007, 12:02 »

А если это добавить ?

Код:

setAutoFillBackground(true);
Записан
cresta
Гость
« Ответ #2 : Июль 10, 2007, 12:40 »

это не то.
Причина в том, что fillRect принимает точку x,y как левый верхний угол ректа, а drawText принимает эту точку как левый нижний угол, и рисует за пределами ректа, залитого fillRect'ом. Пришлось делать через задницу: fillRect(x, y, w, -h, ...)
И хотя бы одно слово написали про этот прикол в хелпе Грустный
Записан
SABROG
Гость
« Ответ #3 : Июль 10, 2007, 13:49 »

Может быть дело в этом ?

Цитировать

Draws the given text at position (x, y), using the painter's currently defined text direction.


И надо играться с флагами:

Цитировать

Qt::AlignLeft
Qt::AlignRight
Qt::AlignHCenter
Qt::AlignTop
Qt::AlignBottom
Qt::AlignVCenter
Qt::AlignCenter
Qt::TextSingleLine
Qt::TextExpandTabs
Qt::TextShowMnemonic
Qt::TextWordWrap
Записан
cresta
Гость
« Ответ #4 : Июль 10, 2007, 16:00 »

Нет, дело именно в том, что ректы для fillRect и drawText не совпадают.
А  text direction задает направление лево-право.

Перечисленные флаги влияют на положение текста внутри ректа, а не на положение ректа относительно точки x,y.
Записан
Sergeich
Гость
« Ответ #5 : Июль 10, 2007, 16:44 »

А почему бы не юзать версию QPainter::drawText ( const QRectF & rectangle, int flags, const QString & text, QRectF * boundingRect = 0 ) ?
Записан
WW
Гость
« Ответ #6 : Июль 11, 2007, 11:17 »

Цитата: "cresta"
Нет, дело именно в том, что ректы для fillRect и drawText не совпадают.
А  text direction задает направление лево-право.

Перечисленные флаги влияют на положение текста внутри ректа, а не на положение ректа относительно точки x,y.

Читаем Бланшета и пишем:
Код:
QMatrix matrix;
matrix.translate(-10.0, -20.0);
matrix.rotate(45.0);
matrix.translate(+10.0, +20.0);
painter.setMatrix(matrix);
painter.drawВсеЧтоТебеНужноИтакКакТебеНужно...

Вообщем, читаем Бланшета.
Записан
cresta
Гость
« Ответ #7 : Июль 11, 2007, 13:34 »

Цитата: "WW"

Читаем Бланшета и пишем:
Код:
QMatrix matrix;
matrix.translate(-10.0, -20.0);
matrix.rotate(45.0);
matrix.translate(+10.0, +20.0);
painter.setMatrix(matrix);
painter.drawВсеЧтоТебеНужноИтакКакТебеНужно...

Вообщем, читаем Бланшета.


Не Бланшета, а Бланшет. Ибо не склоняется.

Неужели

Код:
QMatrix matrix;
matrix.translate(-10.0, -20.0);
matrix.rotate(45.0);
matrix.translate(+10.0, +20.0);
painter.setMatrix(matrix);


проще чем:
Код:
-h


Непонимающий??
Или может работать быстрее будет? Или размер кода меньше? Или читабельность выше?

Гипертрофированная оопизация выглядит чудовищно Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #8 : Июль 11, 2007, 16:14 »

Бланшет - это он, а не она, поэтому можно и склонять...

А через матрицы имхо зло...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.446 секунд. Запросов: 22.