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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QBrush и текстуры  (Прочитано 5523 раз)
fear
Гость
« : Октябрь 16, 2008, 15:32 »

Код:
QPainter p(this);
QPixmap pixmap(":/images/panel.png");
p.setBrush(pixmap);
p.drawRect(rect());

Приведенный выше код заполняет область rect() тексурой 'panel.png'. При этом текстура не растягивается, а дублируется. Возможно ли каким-либо образом изменить способ отрисовки структуры не изменяя объекта QPixmap.

Записан
Rcus
Гость
« Ответ #1 : Октябрь 16, 2008, 16:26 »

если вам нужно именно масштабировать текстуру, то можно использовать
Цитировать
void QPainter::drawPixmap ( const QRect & rectangle, const QPixmap & pixmap )
.. Draws the given pixmap into the given rectangle.
Note: The pixmap is scaled to fit the rectangle, if both the pixmap and rectangle size disagree.
если же необходимо залить область градиентом, то есть QBrush ( const QGradient & gradient )
Записан
Detonator
Гость
« Ответ #2 : Октябрь 17, 2008, 02:23 »

лучше один раз растянуть текстуру и запомнить в отдельном пиксмапе, чтобы потом быстрее отрисовка шла через простой drawPixmap().
Записан
fear
Гость
« Ответ #3 : Октябрь 17, 2008, 16:53 »

если вам нужно именно масштабировать текстуру, то можно использовать
Цитировать
void QPainter::drawPixmap ( const QRect & rectangle, const QPixmap & pixmap )
.. Draws the given pixmap into the given rectangle.
Note: The pixmap is scaled to fit the rectangle, if both the pixmap and rectangle size disagree.
если же необходимо залить область градиентом, то есть QBrush ( const QGradient & gradient )

Вопрос состоит в работе именно с текстурой и нужно имеено её масштабировать, хотелось бы использовать её в качестве фона контролов. Использовать в этих целях метод drawPixmap() не удобно, так как заставит переопределять методы отрисовки контролов. Вот если создать кисть таким образом QBrush(const QPixmap &), а затем добавить её в палитру используемую стилем... но тут появляется вопрос, как заставить текстуру назначеную кисти масштабироваться (растягиваться), а не дублироваться?

Код:
void MyStyle::polish(QPalette &palette)
{
  QPixmap pixmap(":/images/panel.png");

  palette = QPalette(Qt::blue);
  palette.setBrush(QPalette::Background, QBrush(pixmap));
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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