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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как изменить цвет QGroupBox?  (Прочитано 11851 раз)
zzzseregazzz
Гость
« : Сентябрь 16, 2013, 14:59 »

Добрый день.
На форме (Qt 4.4.3) есть QGroupBox ui.gb, который надо выделить при щелчке мышью.
Такой код не работает!
Код
C++ (Qt)
QPalette p = ui.gb->palette();
p.setBrush(ui.gb->backgroundRole(), QBrush(Qt::red));
ui.gb->setPalette(p);
Единственный способ, который сработал - создать наследника QGroupBox , и в paintEvent рисовать прямоугольник. Но во первых он выходит за рамку, во вторых получается задать только жестко заданный цвет. Переменная-член класса с цветом не учитывается. В отладчике увидел, что в paintEvent почему-то другой this по сравнению с setColor.
Код
C++ (Qt)
void MyGroupBox::paintEvent(QPaintEvent* e)
{
QPainter p;
p.begin(this);
p.setBrush(color);//не работает
p.setPen(color);//не работает
p.setBrush(Qt::red);//так работает
p.setPen(Qt::red);//так работает
int w=width(),h=height();
p.drawRect(0,0,w,h);
p.end();
QGroupBox::paintEvent(e);
}
 
void MyGroupBox::setColor(QColor c)
{
color=c;
repaint();
}

Отсюда вопрос: как правильно изменить цвет QGroupBox?
Можно ли это сделать, не создавая наследника?
А если наследник нужен, то как сделать цвет изменяемым?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Сентябрь 16, 2013, 16:27 »

ui.gb->setStyleSheet("QGroupBox {background-color: red}");
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
_OLEGator_
Гость
« Ответ #2 : Сентябрь 16, 2013, 16:40 »

Типичная ошибка.

Код
C++ (Qt)
QWidget::setAutoFillBackground(true);
Записан
zzzseregazzz
Гость
« Ответ #3 : Сентябрь 16, 2013, 16:54 »

Уже пробовал
Код
C++ (Qt)
ui.gb->setAutoFillBackground(true);
С ним тоже не работает.
И
Код
C++ (Qt)
ui.gb->setStyleSheet("QGroupBox {background-color: red}");
тоже не работает
« Последнее редактирование: Сентябрь 16, 2013, 16:56 от zzzseregazzz » Записан
_OLEGator_
Гость
« Ответ #4 : Сентябрь 16, 2013, 16:58 »

Потому что должно быть так:

Код
C++ (Qt)
ui.gb->setStyleSheet("background-color: red");
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #5 : Сентябрь 16, 2013, 19:30 »

у меня и с и без QGroupBox {} работает (Qt 4.8.5)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
_OLEGator_
Гость
« Ответ #6 : Сентябрь 16, 2013, 20:27 »

to kambala:
предположил, что возможно с этим проблема - не было возможности проверить.
у меня setPalette + setAutoFillBackground тоже работает, проверял через Designer.
Записан
zzzseregazzz
Гость
« Ответ #7 : Сентябрь 17, 2013, 08:05 »

При этом с QLabel оба метода работают.
QGroupBox в моей программе помещен в QMainWindow. Если те же операции применить к главному окну (this), то цвет всех элементов успешно меняется (включая QGroupBox).
Но мне надо поменять только один QGroupBox.
« Последнее редактирование: Сентябрь 17, 2013, 08:12 от zzzseregazzz » Записан
Bepec
Гость
« Ответ #8 : Сентябрь 17, 2013, 08:11 »

Скиньте свой проект. Полностью. В архиве. С pro файлом.
Записан
zzzseregazzz
Гость
« Ответ #9 : Сентябрь 17, 2013, 09:04 »

В общем после пересборки проекта стало работать.
При этом через setStyleSheet окрашиваются также все кнопки, находящиеся в групбоксе, а через setPalette - только сам групбокс. Так и должно быть?
Записан
Bepec
Гость
« Ответ #10 : Сентябрь 17, 2013, 09:34 »

Код:
.QGroupBox{background-color: red}
вроде
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #11 : Сентябрь 17, 2013, 11:17 »

ui.gb->setStyleSheet("QGroupBox {background-color: red}");
так не должно окрашивать дочерние элементы вообще-то
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Bepec
Гость
« Ответ #12 : Сентябрь 17, 2013, 12:04 »

Ну именно так я понял его последнее сообщение. Ему нафиг не нужны красные кнопки Улыбающийся

PS Да, это нормальное поведение. Стайлшит наследуется дочерними элементами. Палитра - не наследуется. Для ограничения наследования стайлшита используется селектор "." .

Записан
zzzseregazzz
Гость
« Ответ #13 : Сентябрь 18, 2013, 15:26 »

Цитировать
Для ограничения наследования стайлшита используется селектор "."
Можно пример как его использовать?
И еще вопрос - как окрасить только внутри рамки? Т.е. обычным способом красится весь прямоугольник с рисунка, хотя в обычной расцветке верхняя граница не видна.
Цитировать
_____________________
|--GroupBox---------------|
|                                    |
|____________________|
« Последнее редактирование: Сентябрь 18, 2013, 15:54 от zzzseregazzz » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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