Можно ли заставить окно соответствовать размеру виджета? - PullRequest
0 голосов
/ 04 июля 2019

TLDR:

Я переключаюсь между вкладками моей программы, вызывая .hide () в исходном виджете и вызывая .show () в виджете, на который нужно переключиться, но при этом он становится только начальным виджетом, и ни один из остальных те, которые вписываются в мое окно.
Можно ли вообще гарантировать, что окно всегда соответствует тому месту, которое требуется в данный момент отображаемому виджету?

Чтобы было ясно, я на самом деле вызываю show () / hide () для QFrames, которые содержат виджеты, между которыми я переключаюсь. Единственное, что находится за рамкой, это кнопка возврата.

подробности:

Нажатие кнопки в моем виджете приводит к вызову .hide () для этого виджета и .show () для дочернего виджета; это механизм моей программы для переключения между окнами / вкладками (основной вид имеет несколько кнопок, каждая из которых соответствует новому окну, а каждое окно имеет кнопку возврата, чтобы вернуться к основному виду)

При первоначальном отображении мое окно выглядит нормально: все элементы на главном экране хорошо отображаются и идеально соответствуют окну. Но проблема возникает, когда я переключаюсь на другой виджет (опять же, я делаю это, вызывая .hide () для текущего виджета и вызывая .show () для виджета, на который нужно переключиться). Окно остается того же размера, даже если виджет, на который переключается, часто больше или меньше, чем основной вид.

Технически, это QFrames, что я вызываю show () / hide () на. Единственная вещь внутри каждого QFrame - это соответствующий виджет. Таким образом, у меня может быть кнопка возврата, которая не зависит от того, какой виджет я использую, поэтому не каждый виджет, который я добавляю, должен создавать свою собственную кнопку возврата.

Макеты, похоже, здесь не помогают, я думаю, потому что они больше предназначены для управления подвиджетами родительского виджета, а не для управления виджетами верхнего уровня внутри окна. Если бы я мог просто как-то изменить размер окна, то я мог бы взять размеры текущего виджета и изменить размер окна, чтобы он был точно таким же, но я не знаю, существует ли функция, изменяющая размер вашего окна.

1 Ответ

0 голосов
/ 04 июля 2019

Мне не известен механизм, где размер окна автоматически адаптировался бы к его содержимому в Qt. Вы можете использовать QStackedWidget и его ´QStackWidget :: currentChanged () `, чтобы вы могли изменять размеры окон в соответствии с тем, какой виджет вы показываете.

Вы говорите, что вам требуется функция "назад". Это также должно быть тривиально для реализации с использованием вышеупомянутого сигнала и сохранения стека навигации самостоятельно.

Примечание: такой вид изменения размеров окон сам по себе обычно не является тем, что пользователь хотел бы видеть на ПК, где они могли бы расположить окна так, как им нравится вручную.

Примечание 2: Вы можете реализовать аналогичную функциональность, используя механизм фильтра событий Qt и реагируя на скрытие и отображение событий в фильтре, и соответственно изменяя размер окна, но это ... очень хакерский подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...