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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Фон OpenGL виджета как фон окна.  (Прочитано 7123 раз)
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());
}

В принципе, что-то похожее получается, но разница очень заметна. Если ни у кого не было - могу выложить скриншот. Как это исправить?
Записан
Caduceus
Гость
« Ответ #1 : Сентябрь 29, 2009, 13:10 »

Вот как это выглядит:
Записан
_OLEGator_
Гость
« Ответ #2 : Сентябрь 29, 2009, 19:15 »

А почему QPalette::Button? Может QPalette::Window?
Записан
Caduceus
Гость
« Ответ #3 : Сентябрь 29, 2009, 21:41 »

Без разницы. То же самое
Записан
_OLEGator_
Гость
« Ответ #4 : Сентябрь 29, 2009, 22:08 »

Сделал минимальный проект - все работает как надо.
Кидай свой проект, посмотрим что не так...
Записан
Caduceus
Гость
« Ответ #5 : Сентябрь 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 - тоже такое получите
Записан
_OLEGator_
Гость
« Ответ #6 : Сентябрь 30, 2009, 21:15 »

Так должно работать:
Код
C++ (Qt)
painter->setBrush(QApplication::palette().brush(QPalette::Window));
И вот так можно,  чтобы не тянуть QApplication:
Код
C++ (Qt)
painter->setBrush(this->palette().brush(QPalette::Window));
Записан
Caduceus
Гость
« Ответ #7 : Октябрь 01, 2009, 10:11 »

Попробовал и так и так - все одно
Записан
_OLEGator_
Гость
« Ответ #8 : Октябрь 01, 2009, 19:09 »

У меня все работает, проект прилагаю..
Больше чем помочь не знаю.
Записан
Caduceus
Гость
« Ответ #9 : Октябрь 02, 2009, 08:23 »

Спасибо большое. Буду разбираться.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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