Russian Qt Forum

Qt => QSS => Тема начата: slava_d200 от Декабрь 26, 2011, 19:53



Название: помогите разобратся со стилями внутри QTabWidget
Отправлено: slava_d200 от Декабрь 26, 2011, 19:53
Суть вопроса.
есть файл со стилями.
есть собственный класс от QPuthButton.

если внутри QStacketWidget поместить мою кнопку + QTabWidget (и во внутрь еще положить мою кнопку)

то стил кнопки внутри QTabWidget не применяется (кнопка даже не видна) а в QStacketWidget - все нормально.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: lighting от Декабрь 27, 2011, 10:24
код-бы выложил, а то так и не дождешься ответа.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: slava_d200 от Декабрь 27, 2011, 16:37
файл стиля:
CButton {
    border: 1px solid #000000;
    border-radius: 10px;
    background-color: #cfcccc;
    font: bold 20px;
}
класс:
class CButton: public QPushButton
{
    Q_OBJECT
public:
    explicit CButton(QWidget *parent = 0,const QString& str = "")
    {
        this->setText(str);
    }
};

далее все делается в конструкторе и переопределяются QPushButton на CButton.

все тривиально просто - но не получается почемуто.

если внутри QStacketWidget поместить мою кнопку + QTabWidget (и во внутрь QTabWidget  еще положить мою кнопку)
то стил кнопки внутри QTabWidget не применяется (кнопка даже не видна) а в QStacketWidget - все нормально.

так подключаю стили:
    MainWindow w;

    QFile styleFile("Istyle.qss");
    if( styleFile.open(QFile::ReadOnly) ) {
       QString styleSheet = QLatin1String(styleFile.readAll());
      w.setStyleSheet(styleSheet);
    }

код-бы выложил, а то так и не дождешься ответа.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: andrew.k от Декабрь 27, 2011, 17:59
Цитировать
если внутри QStacketWidget поместить мою кнопку + QTabWidget (и во внутрь QTabWidget  еще положить мою кнопку)
то стил кнопки внутри QTabWidget не применяется (кнопка даже не видна) а в QStacketWidget - все нормально.
Не понял вообще это описание.

Стили вроде как наследуются от родителя.
Где вызов родительского конструктора?
Код
C++ (Qt)
explicit CButton(QWidget *parent = 0,const QString& str = "")
         :QPushButton(parent)
   {}
Может в этом проблема.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: xokc от Декабрь 27, 2011, 18:25
В соотвествии с http://doc.qt.nokia.com/4.7/qstyle.html#developing-style-aware-custom-widgets
добавь метод
Код
C++ (Qt)
void СButton::paintEvent(QPaintEvent * /*event*/)
{
   QStyleOption opt;
   opt.init(this);
   QPainter p(this);
   style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
 




Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: andrew.k от Декабрь 27, 2011, 18:46
Он же наследуется от кнопки, а не сам рисует виджет.
Не пойму зачем добавлять?


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: slava_d200 от Декабрь 27, 2011, 18:50
после добавдения данного кода кнопки вообще перестали отображатся, даже там где раньше отображались
В соотвествии с http://doc.qt.nokia.com/4.7/qstyle.html#developing-style-aware-custom-widgets
добавь метод
Код
C++ (Qt)
void СButton::paintEvent(QPaintEvent * /*event*/)
{
   QStyleOption opt;
   opt.init(this);
   QPainter p(this);
   style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
 





Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: slava_d200 от Декабрь 27, 2011, 18:51
Действительно именно в этом была проблема. СПАСИБО.
Цитировать
если внутри QStacketWidget поместить мою кнопку + QTabWidget (и во внутрь QTabWidget  еще положить мою кнопку)
то стил кнопки внутри QTabWidget не применяется (кнопка даже не видна) а в QStacketWidget - все нормально.
Не понял вообще это описание.

Стили вроде как наследуются от родителя.
Где вызов родительского конструктора?
Код
C++ (Qt)
explicit CButton(QWidget *parent = 0,const QString& str = "")
         :QPushButton(parent)
   {}
Может в этом проблема.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: slava_d200 от Декабрь 27, 2011, 18:56
итересно тока почему в одном варианте ошибочный конструктор работал а в другом варианте нет.

повторюсь:
открыл редактор форм. в эту форму положил QStacketWidget, во внутрь QStacketWidget разместил CButton(1) и
 QTabWidget, во внутрь QTabWidget разместил CButton(2).

так вот :
CButton(1) - корректно отображалась
CButton(2) - вообще не отображалась


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: andrew.k от Декабрь 27, 2011, 18:57
Потому что один из них становится родителем кнопки при добавлении, а второй нет.

Цитировать
int QStackedWidget::addWidget ( QWidget * widget )

Appends the given widget to the QStackedWidget and returns the index position. Ownership of widget is passed on to the QStackedWidget.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: slava_d200 от Декабрь 27, 2011, 19:02
так а разве QTabWidget в тоже время не является дочкой и не принимает стиль основной формы ?
сорри если тупой вопрос.

Потому что один из них становится родителем кнопки при добавлении, а второй нет.

Цитировать
int QStackedWidget::addWidget ( QWidget * widget )

Appends the given widget to the QStackedWidget and returns the index position. Ownership of widget is passed on to the QStackedWidget.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: andrew.k от Декабрь 27, 2011, 19:17
так а разве QTabWidget в тоже время не является дочкой и не принимает стиль основной формы ?
сорри если тупой вопрос.

Потому что один из них становится родителем кнопки при добавлении, а второй нет.

Цитировать
int QStackedWidget::addWidget ( QWidget * widget )

Appends the given widget to the QStackedWidget and returns the index position. Ownership of widget is passed on to the QStackedWidget.
Потому что ты не вызвал конструктор QPushButton, поэтому указатель на родителя переданный в CButton никуда не сохранился.
Все экземпляры твоего класса не имели бы родителя.

А стэквиджет на твое счастье взял ownership и поэтому все(почти) стало хорошо.


Название: Re: помогите разобратся со стилями внутри QTabWidget
Отправлено: slava_d200 от Декабрь 27, 2011, 19:21
СПАСИБО за помощь!  :)