Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Апрель 15, 2019, 19:45



Название: Задолбали лэйауты...
Отправлено: Гурман от Апрель 15, 2019, 19:45
Давно ими не пользовался, работал всё время со сценами, этого хватало. Сейчас делаю приложение для Android, нарисовал в дизайнере такую структуру:

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

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


Название: Re: Задолбали лэйауты...
Отправлено: kuzulis от Апрель 15, 2019, 22:19
Юзай QML :)

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

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


Название: Re: Задолбали лэйауты...
Отправлено: Гурман от Апрель 16, 2019, 12:24
Юзай QML :)

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

Попробуй все это сделать (все ресайзы и пр.) по таймеру через некоторое время.. Ну, или через invokeMethod (пальцем в небо).
Спасибо, кэп, но вопрос надо было всё-таки прочитать чтобы не давать советы не имеющие к нему отношения. QML никак не поможет, наоборот, усложнит.


Название: Re: Задолбали лэйауты...
Отправлено: ecspertiza от Апрель 16, 2019, 12:36
QMainWidget::showFullScreen вместо ресайза
QMainWidget::setCentralWidget(QWidget)


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


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


Название: Re: Задолбали лэйауты...
Отправлено: Гурман от Апрель 16, 2019, 15:45
Так может нужен еще слой?
Код:
QMainWindow
   QVBoxLayout      <<<<<<<<<<<
      QWidget // так это centralWidget
            QVBoxLayout

Как перед centralWidget слой вставить? Его в дизайнере даже удалить нельзя. Вставка чего-либо в QMainWindow вставляет в этот виджет. И QVBoxLayout - НЕ виджет.


Название: Re: Задолбали лэйауты...
Отправлено: Old от Апрель 16, 2019, 18:16
Как перед centralWidget слой вставить? Его в дизайнере даже удалить нельзя. Вставка чего-либо в QMainWindow вставляет в этот виджет. И QVBoxLayout - НЕ виджет.
А, ну тогда centralWidget уже в layout'е QMainWindow.


Название: Re: Задолбали лэйауты...
Отправлено: Гурман от Апрель 16, 2019, 23:29
centralWidget уже в layout'е QMainWindow.
Это как?...  ???


Название: Re: Задолбали лэйауты...
Отправлено: Old от Апрель 17, 2019, 06:12
Это как?...  ???
На QMainWindow кроме centralWidget расположены и другие виджеты: menubar, toolbar, statusbar. Они изначально помещены в layout.
А пользователь размещает свои виджеты на центральном и сам заботится о необходимых layout.
Короче, размещением  centralWidget занимается layout создаваемый внутри QMainWindow.


Название: Re: Задолбали лэйауты...
Отправлено: lit-uriy от Апрель 17, 2019, 07:46
Код
C++ (Qt)
QMainWindow
     QWidget
           QVBoxLayout // на всё окно
...
 

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


Название: Re: Задолбали лэйауты...
Отправлено: Гурман от Апрель 17, 2019, 12:07
Уууу... шайтан... И чего бы этот лэйаут, который есть у QMainWindow, не показывать в структуре?  >:( Сразу вопросы отпали бы.


Название: Re: Задолбали лэйауты...
Отправлено: lit-uriy от Апрель 18, 2019, 06:21
Гурман, компоновщик у QWidget-а, который в качестве центрального установлен для QMainWindow, а не у самого QMainWindow.

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

Покрутить настройки этого компоновщика можно в списке свойств его виджета, в самом конце списка, (что тоже не очевидно :)) )