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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Задолбали лэйауты...  (Прочитано 10549 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Апрель 15, 2019, 19:45 »

Давно ими не пользовался, работал всё время со сценами, этого хватало. Сейчас делаю приложение для Android, нарисовал в дизайнере такую структуру:

Код:
QMainWindow
      QWidget
            QVBoxLayout // на всё окно
                  QHBoxLayout
                        QButton1
                        QButton2
                        QButton3
                  QListWidget
                  QLabel

Установил политики Expanding, минимальные размеры всего под экран 1280х720, максимальные не ограничены. При запуске делаю у главного окна resize( QApplication::desktop()->availableGeometry().size() ) чтобы всё окно подстраивалось под доступные размеры экрана. Но всё остаётся как было нарисовано изначально, размеры не меняются. Пытаюсь делать setGeometry() для QVBoxLayout - ничего не меняется. Что я забыл сделать?
Записан

2^7-1 == 127, задумайтесь...
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Апрель 15, 2019, 22:19 »

Юзай QML Улыбающийся

Цитировать
Что я забыл сделать?

Попробуй все это сделать (все ресайзы и пр.) по таймеру через некоторое время.. Ну, или через invokeMethod (пальцем в небо).
Записан

ArchLinux x86_64 / Win10 64 bit
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Апрель 16, 2019, 12:24 »

Юзай QML Улыбающийся

Цитировать
Что я забыл сделать?

Попробуй все это сделать (все ресайзы и пр.) по таймеру через некоторое время.. Ну, или через invokeMethod (пальцем в небо).
Спасибо, кэп, но вопрос надо было всё-таки прочитать чтобы не давать советы не имеющие к нему отношения. QML никак не поможет, наоборот, усложнит.
« Последнее редактирование: Апрель 16, 2019, 12:25 от Гурман » Записан

2^7-1 == 127, задумайтесь...
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Апрель 16, 2019, 12:36 »

QMainWidget::showFullScreen вместо ресайза
QMainWidget::setCentralWidget(QWidget)
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Апрель 16, 2019, 13:31 »

QMainWidget::showFullScreen вместо ресайза
QMainWidget::setCentralWidget(QWidget)
Нифига. Окно увеличивается, а лейаут нет. Центральный виджет там есть - это QWidget под QMainWindow. Что-то ещё должно быть для связи QMainWindow и лейаута - но не помню что. Последний раз с лейаутами работал 6 лет назад.
« Последнее редактирование: Апрель 16, 2019, 14:15 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Апрель 16, 2019, 14:45 »

Нифига. Окно увеличивается, а лейаут нет. Центральный виджет там есть - это QWidget под QMainWindow. Что-то ещё должно быть для связи QMainWindow и лейаута - но не помню что. Последний раз с лейаутами работал 6 лет назад.
Так может нужен еще слой?
QMainWindow
   QVBoxLayout      <<<<<<<<<<<
      QWidget
            QVBoxLayout // на всё окно
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Апрель 16, 2019, 15:45 »

Так может нужен еще слой?
Код:
QMainWindow
   QVBoxLayout      <<<<<<<<<<<
      QWidget // так это centralWidget
            QVBoxLayout

Как перед centralWidget слой вставить? Его в дизайнере даже удалить нельзя. Вставка чего-либо в QMainWindow вставляет в этот виджет. И QVBoxLayout - НЕ виджет.
« Последнее редактирование: Апрель 16, 2019, 15:49 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #7 : Апрель 16, 2019, 18:16 »

Как перед centralWidget слой вставить? Его в дизайнере даже удалить нельзя. Вставка чего-либо в QMainWindow вставляет в этот виджет. И QVBoxLayout - НЕ виджет.
А, ну тогда centralWidget уже в layout'е QMainWindow.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #8 : Апрель 16, 2019, 23:29 »

centralWidget уже в layout'е QMainWindow.
Это как?...  Непонимающий
Записан

2^7-1 == 127, задумайтесь...
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Апрель 17, 2019, 06:12 »

Это как?...  Непонимающий
На QMainWindow кроме centralWidget расположены и другие виджеты: menubar, toolbar, statusbar. Они изначально помещены в layout.
А пользователь размещает свои виджеты на центральном и сам заботится о необходимых layout.
Короче, размещением  centralWidget занимается layout создаваемый внутри QMainWindow.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Апрель 17, 2019, 07:46 »

Код
C++ (Qt)
QMainWindow
     QWidget
           QVBoxLayout // на всё окно
...
 

В Дизайнере компоновщики на виджет накладывать не надо, надо выделить виджет и задать ему компоновку, тогда получится такая структура как ты описал.
Если же ты в Дизайнере на виджет положишь компоновщик, то итоговая структура получится такая:
Код
C++ (Qt)
QMainWindow
     QWidget
           QVBoxLayout // на всё окно <-- лишний неуправляемый (не установленный для виджета) компоновщик
...
 
Записан

Юра.
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #11 : Апрель 17, 2019, 12:07 »

Уууу... шайтан... И чего бы этот лэйаут, который есть у QMainWindow, не показывать в структуре?  Злой Сразу вопросы отпали бы.
Записан

2^7-1 == 127, задумайтесь...
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #12 : Апрель 18, 2019, 06:21 »

Гурман, компоновщик у QWidget-а, который в качестве центрального установлен для QMainWindow, а не у самого QMainWindow.

Согласен, что не удобно и неочевидно.

Покрутить настройки этого компоновщика можно в списке свойств его виджета, в самом конце списка, (что тоже не очевидно Улыбающийся) )
Записан

Юра.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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