![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Young |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 10.10.2013 Пользователь №: 3952 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
доброго времени суток уважаемые знатоки, пол дня не могу решить, на первый взгляд, идиотскую проблемму. Хотел сделать прямоугольный виджет на главном окне. Сделал класс А, унаследованный от QWidget и класс B, унаследованный от QMainWindow. Объявил переменную типа А в классе В, инициализировал в конструкторе, сделал переменную производной от "centralwidget" класса В и покрасил её при помощи "setStyleSheet". Виджет класса А на окне не отобразился. Сделал переменную А самостоятельным окном - окно появилось нужного цвета. Для проверки сделал в классе В ещё одну переменную, но уже типа QWidget, проделал с ней все то же самое, что и с предыдущей - и все получилось. Не могли бы вы подсказать, в чем я ошибся. Код прилогается
Класс А
конструктор класса А
класс В
конструктор класса В
доброго времени суток уважаемые знатоки, пол дня не могу решить, на первый взгляд, идиотскую проблемму. Хотел сделать прямоугольный виджет на главном окне. Сделал класс А, унаследованный от QWidget и класс B, унаследованный от QMainWindow. Объявил переменную типа А в классе В, инициализировал в конструкторе, сделал переменную производной от "centralwidget" класса В и покрасил её при помощи "setStyleSheet". Виджет класса А на окне не отобразился. Сделал переменную А самостоятельным окном - окно появилось нужного цвета. Для проверки сделал в классе В ещё одну переменную, но уже типа QWidget, проделал с ней все то же самое, что и с предыдущей - и все получилось. Не могли бы вы подсказать, в чем я ошибся. Код прилогается Класс А
конструктор класса А
класс В
конструктор класса В
|
|
|
ilyabvt |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: ![]() ![]() ![]() |
Цитата
Добавьте upper_toolbar родителя:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
используй компоновщики, для размещения одних виджетов внутри других
|
|
|
Young |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 10.10.2013 Пользователь №: 3952 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Steklova Olga |
![]()
Сообщение
#5
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Young, от того, что ты назвал виджет centralwidget, центральным он не стал.
В классе QMainWindow есть
Если какой-то виджет myMainWidget надо сделать центральным в главном окне myMainWindow, то после создания myMainWidget надо в методе класса окна myMainWindow указать это:
Я не стала бы называть свой виджет centralwidget, чтобы не путать с centralWidget(). ![]() |
|
|
Young |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 10.10.2013 Пользователь №: 3952 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
да-да, привожу полный код
заметил интересную особенность QWidget в QHBoxLayout не отображался, отображались только его производные (QPushbutton). Зато QWidget рисуется на другом виджете, без компановщиков (или setstylesheet только так работают), Пока виджет остается таким с ним ещё можно работать, но стоит ему стать классом производным от QWigget - как все. А вот классы производные от QPushbutton отобразить получается, к сожалению мне это никак не помогает. Все, варианты закончились, похоже придется искать другие решения, а вместе с ними и все переделывать. Досадно |
|
|
Steklova Olga |
![]()
Сообщение
#7
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Смотри сюда:
tmpTest.pro
main.cpp
mainwindow1.h
mainwindow1.cpp
|
|
|
Steklova Olga |
![]()
Сообщение
#8
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Young, когда ты пишешь так то bbb - это родительский виджет, а не родительский класс.Не путай две вещи: "родительский класс" и "родительский виджет". 1) если ты создаешь widget класса childСlass, то childСlass может быть дочерним классом, который наследуется от родительского класса parentClass. В моем примере в main.cpp создается виджет w класса MainWindow1, класс MainWindow1 наследуется от родительского класса QMainWindow. 2) если ты хочешь отобразить widget класса childСlass, то ты должен либо каким-то образом указать для него родительский виджет либо отобразить его отдельным окном. В моем примере при создании виджетов w и btn0 не указан родительский виджет, поэтому эти виджеты отображаются как отдельные окна, при создании виджетов btn1, btn2, btn3, widget1, widget2 не указан родительский виджет, но они с помощью addWidget размещены на hLayout, а hLayout с помощью setLayout установлен для mainWidget, при размещении виджеты обретают родительский виджет, при создании виджета mainWidget не указан родительский виджет, но с помощью setCentralWidget(mainWidget) виджет mainWidget обретает родительский виджет w, а так как мы отображаем виджет w, то вместе с ним отображаются и все его дочерние виджеты. |
|
|
Young |
![]()
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 10.10.2013 Пользователь №: 3952 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
да, на счет QWidget-ов я погорячился - в layout-e пустой виджет сожрал спейсер. Но в отношении классов производных от QWidget все в силе, а это к сожалению ключевой момент
|
|
|
Young |
![]()
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 10.10.2013 Пользователь №: 3952 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
итак возвращаясь к вопросу - не знает ли кто - нибудь, как с помощью setstylesheet покрасить объект класса, унаследованного от QWidget? У меня почему то не получается
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 8.7.2025, 5:50 |