Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xokc от Декабря 02, 2009, 21:05



Название: Qt style sheet и наследник QWidget
Отправлено: xokc от Декабря 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 - не хочет.


Название: Re: Qt style sheet и наследник QWidget
Отправлено: Blayder от Декабря 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


Название: Re: Qt style sheet и наследник QWidget
Отправлено: lit-uriy от Декабря 02, 2009, 21:40
xokc, Попробуй не фон заливать, либо поиграть со свойством setAutoFillBackground.
Стили должны применятся

П.С. Засуни для начала виджеты в компоновщик, а то непонятно их взаимное положение, может один под другим


Название: Re: Qt style sheet и наследник QWidget
Отправлено: xokc от Декабря 03, 2009, 06:28
xokc, Попробуй не фон заливать, либо поиграть со свойством setAutoFillBackground.
Стили должны применятся

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


Название: Re: Qt style sheet и наследник QWidget
Отправлено: xokc от Декабря 03, 2009, 20:31
Цитировать
Если вы создаете подкласс от QWidget, вам нужно предоставить paintEvent вашему QWidget...
Спасибо сделал именно так и все заработало.