Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Caduceus от Сентябрь 29, 2009, 12:58



Название: Фон OpenGL виджета как фон окна.
Отправлено: Caduceus от Сентябрь 29, 2009, 12:58
Делаю виджет - кубик, который можно вращать. Хочу чтобы он на форме смотрелся не как отдельный прямоуголник, а просто кубик на форме - то есть для этого фон за кубиком делаю как фон окна выбранного стиля. Вот так:

Код:
void MyWidget::drawBackground(QPainter *painter)
{
painter->setPen(Qt::NoPen);
painter->setBrush(QApplication::style()->standardPalette().brush(QPalette::Active,QPalette::Button));
painter->drawRect(rect());
}

В принципе, что-то похожее получается, но разница очень заметна. Если ни у кого не было - могу выложить скриншот. Как это исправить?


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: Caduceus от Сентябрь 29, 2009, 13:10
Вот как это выглядит:


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: _OLEGator_ от Сентябрь 29, 2009, 19:15
А почему QPalette::Button? Может QPalette::Window?


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: Caduceus от Сентябрь 29, 2009, 21:41
Без разницы. То же самое


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: _OLEGator_ от Сентябрь 29, 2009, 22:08
Сделал минимальный проект - все работает как надо.
Кидай свой проект, посмотрим что не так...


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: Caduceus от Сентябрь 30, 2009, 08:53
Дейтсвительно, если сделать стиль по-умолчианию, то вес нормально. Но я в начале приложения выставляю
a.setStyle("Cleanlooks");
a.setPalette(QApplication::style()->standardPalette());

То есть у меня стиль Cleanlooks.

Пипеткой взял цвета - цвет фона окна - (233, 228, 223), а функция QApplication::style()->standardPalette().color(QPalette::Current,QPalette::Window); возвращает (239, 235, 231) - собственно именно такой пипетка и возвращает.

Попробуйте установить Cleanlooks - тоже такое получите


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: _OLEGator_ от Сентябрь 30, 2009, 21:15
Так должно работать:
Код
C++ (Qt)
painter->setBrush(QApplication::palette().brush(QPalette::Window));
И вот так можно,  чтобы не тянуть QApplication:
Код
C++ (Qt)
painter->setBrush(this->palette().brush(QPalette::Window));


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: Caduceus от Октябрь 01, 2009, 10:11
Попробовал и так и так - все одно


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: _OLEGator_ от Октябрь 01, 2009, 19:09
У меня все работает, проект прилагаю..
Больше чем помочь не знаю.


Название: Re: Фон OpenGL виджета как фон окна.
Отправлено: Caduceus от Октябрь 02, 2009, 08:23
Спасибо большое. Буду разбираться.