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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с setPalette при использовании setStyleSheet у родителя  (Прочитано 4593 раз)
Semich
Гость
« : Январь 25, 2011, 19:42 »

Сегодня с толкнулся со следующей проблемой(на Qt 4.4 все работало нормально а на 4.7 все поехало):
    У меня есть собственный редактор форм(на подобии qt дизайнера ), для удобства я добавил стили для деревьев и таблиц. В центральный виджет QMDIArea.На нем создаю QMdiSubWindow, а уже на эти окошки кидаю редактируемые элементы. У части элементов перегружена функция paint и они рисуются самостоятельно, часть объектов рисуется средствами Qt - кнопки, деревья,листбоксы и т.д. Изменение фонового цвета элементов производится через функцию setPalette. В Qt версии 4.4 все работало нормально, а в Qt 4.7 стиль от родительского объекта распространился и на QMdiSubWindow.
   Как можно решить данную проблему? Часть объектов использует стиль а часть нет.
   Вот накидал небольшой пример демонстрирующий мою проблему:

Код:
#include "widget.h"
#include "ui_widget.h"
#include <QPalette>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    pButton = new QPushButton( "test", this );
    pButton->show();

    pTextEdit = new QTextEdit( this );
    pTextEdit->setGeometry(100,0,100,50);
    pTextEdit->show();

    QPalette pal = pTextEdit->palette();
    pal.setColor( QPalette::Base,Qt::red);
    pTextEdit->setPalette(pal);
    connect( pButton, SIGNAL(clicked( bool )), this, SLOT(Clicked( bool )));

    setStyleSheet("QTreeView { alternate-background-color: yellow; }");

}
void Widget::Clicked( bool )
{
    QPalette pal = pTextEdit->palette();
    pal.setColor( QPalette::Base,Qt::green);
    pTextEdit->setPalette(pal);
}
Widget::~Widget()
{
    delete ui;
}
   Заранее благодарен!!!
   ах да, раньше Windows XP теперь Win7
Записан
shirushizo
Гость
« Ответ #1 : Январь 25, 2011, 19:51 »

При классическом оформлении все применяется, как и раньше в WinXP?

Сначала применяй QPalette к родителю, а потом детям - все будет нормально.
Записан
Semich
Гость
« Ответ #2 : Январь 25, 2011, 19:58 »

В при классическом оформлении та же фигня.

Немного не понял:
Цитировать
Сначала применяй QPalette к родителю, а потом детям - все будет нормально.
В примере я хочу по нажатию на кнопку поменять цвет у QTextEdit, из за стиля у виджета это не срабатывает, но я вовсе не хочу менять цвет у родительского виджета.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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