Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: fear от Октябрь 16, 2008, 15:32



Название: QBrush и текстуры
Отправлено: fear от Октябрь 16, 2008, 15:32
Код:
QPainter p(this);
QPixmap pixmap(":/images/panel.png");
p.setBrush(pixmap);
p.drawRect(rect());

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

(http://manifest.saidme.ru/data/screenshot.png)


Название: Re: QBrush и текстуры
Отправлено: Rcus от Октябрь 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 )


Название: Re: QBrush и текстуры
Отправлено: Detonator от Октябрь 17, 2008, 02:23
лучше один раз растянуть текстуру и запомнить в отдельном пиксмапе, чтобы потом быстрее отрисовка шла через простой drawPixmap().


Название: Re: QBrush и текстуры
Отправлено: fear от Октябрь 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));
}