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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: помогите разобратся со стилями внутри QTabWidget  (Прочитано 11115 раз)
slava_d200
Гость
« : Декабрь 26, 2011, 19:53 »

Суть вопроса.
есть файл со стилями.
есть собственный класс от QPuthButton.

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

то стил кнопки внутри QTabWidget не применяется (кнопка даже не видна) а в QStacketWidget - все нормально.
Записан
lighting
Гость
« Ответ #1 : Декабрь 27, 2011, 10:24 »

код-бы выложил, а то так и не дождешься ответа.
Записан
slava_d200
Гость
« Ответ #2 : Декабрь 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);
    }

код-бы выложил, а то так и не дождешься ответа.
« Последнее редактирование: Декабрь 27, 2011, 16:56 от slava_d200 » Записан
andrew.k
Гость
« Ответ #3 : Декабрь 27, 2011, 17:59 »

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

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

Сообщений: 976



Просмотр профиля
« Ответ #4 : Декабрь 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);
}
 


« Последнее редактирование: Декабрь 27, 2011, 18:27 от xokc » Записан
andrew.k
Гость
« Ответ #5 : Декабрь 27, 2011, 18:46 »

Он же наследуется от кнопки, а не сам рисует виджет.
Не пойму зачем добавлять?
Записан
slava_d200
Гость
« Ответ #6 : Декабрь 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);
}
 



Записан
slava_d200
Гость
« Ответ #7 : Декабрь 27, 2011, 18:51 »

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

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

итересно тока почему в одном варианте ошибочный конструктор работал а в другом варианте нет.

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

так вот :
CButton(1) - корректно отображалась
CButton(2) - вообще не отображалась
Записан
andrew.k
Гость
« Ответ #9 : Декабрь 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.
« Последнее редактирование: Декабрь 27, 2011, 18:59 от andrew.k » Записан
slava_d200
Гость
« Ответ #10 : Декабрь 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.
Записан
andrew.k
Гость
« Ответ #11 : Декабрь 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 и поэтому все(почти) стало хорошо.
Записан
slava_d200
Гость
« Ответ #12 : Декабрь 27, 2011, 19:21 »

СПАСИБО за помощь!  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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