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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt style sheet и наследник QWidget  (Прочитано 7285 раз)
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« : Декабрь 02, 2009, 21:05 »

Почему к наследнику QWidget неприменимы стили?
Код:
class QWidgetChild : public QWidget
{
Q_OBJECT
public:
QWidgetChild(QWidget *parent = 0) : QWidget(parent) {}
~QWidgetChild() {}
}

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
QWidget *w1 = new QWidget(this);
w1->setStyleSheet("background-color: red;");
QWidgetChild *w2 = new QWidgetChild(this);
w2->setStyleSheet("background-color: green;");
}
В этом коде w1 красится красным нормально, а w2 - не хочет.
Записан
Blayder
Гость
« Ответ #1 : Декабрь 02, 2009, 21:34 »

Цитировать
Если вы создаете подкласс от QWidget, вам нужно предоставить paintEvent вашему QWidget как показано ниже:

 void CustomWidget::paintEvent(QPaintEvent *)
 {
     QStyleOption opt;
     opt.init(this);
     QPainter p(this);
     style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
 }

Вышеприведенный код ничего не делает в случае отсутствия таблицы стилей.
http://doc.crossplatform.ru/qt/4.5.0/stylesheet-reference.html#list-of-stylable-widgets
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Декабрь 02, 2009, 21:40 »

xokc, Попробуй не фон заливать, либо поиграть со свойством setAutoFillBackground.
Стили должны применятся

П.С. Засуни для начала виджеты в компоновщик, а то непонятно их взаимное положение, может один под другим
« Последнее редактирование: Декабрь 02, 2009, 21:43 от lit-uriy » Записан

Юра.
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #3 : Декабрь 03, 2009, 06:28 »

xokc, Попробуй не фон заливать, либо поиграть со свойством setAutoFillBackground.
Стили должны применятся

П.С. Засуни для начала виджеты в компоновщик, а то непонятно их взаимное положение, может один под другим
Нет, эти варианты ничего не дают. Приведенный код просто максимально упрощенное представление. Пробовал уже все это во всех проявлениях. Гляну сегодня еще способ от Blayder, хотя и терзают меня смутные сомнения по этому поводу.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #4 : Декабрь 03, 2009, 20:31 »

Цитировать
Если вы создаете подкласс от QWidget, вам нужно предоставить paintEvent вашему QWidget...
Спасибо сделал именно так и все заработало.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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