LINUX.ORG.RU

Как динамически менять размер окна?

 


0

2

В виджете есть скрытый элемент. При нажатии на чекбокс «дополнительные настройки» отображается GroupBox. При этом размер окна не меняется.

Начальное состояние: http://itmages.com/image/view/3967171/f9bbf8a9

Что получается после отображения элемента: http://itmages.com/image/view/3967172/8f067cef

Как должно быть: http://itmages.com/image/view/3967173/5b69989e

Для GroupBox изначально вызывается setVisible(false) (для скрытия). Сигнал toggled чекбокса соединен с setVisible GroupBox'а.

Какой слот окна нужно вызвать, что бы оно обновило свой размер?

P.S. Всё это внутри QWizard и QWizardPage.

★★

P.S. Всё это внутри QWizard и QWizardPage.

О, пару недель назад столкнулся с подобной фигнёй. Как я понял, скрытые виджеты почему-то не учитывается при расчёте layout'a QWizard. Я для себя решил сменой слота setVisible на setEnabled. Если хочется именно visible, то тебе стоит поигаться с layout()->update() и layout()->invalidate() - какой-то их них делал то, что надо, но мне не понравилось и я перешёл на setEnabled.

UVV ★★★★★ ()
Последнее исправление: UVV (всего исправлений: 1)

Вопрос не корысти ради, а только пользы для: зачем для такой простой гуйни использовать qt? Разве tcl/tk не достаточно? Написать и отладить эти окошки минут 15 займет.

anonymous ()
Ответ на: комментарий от anonymous

Разве tcl/tk не достаточно?

диванный теоретик? Там, вероятно, не только wizard. Да и Qt - это не только gui.

UVV ★★★★★ ()
Ответ на: комментарий от UVV

Сам без оскорблений не можешь? «диванный теоретик» — начал самоутверждаться с хамства — получи в ответ адекватное к тебе отношение.

anonymous ()
Ответ на: комментарий от anonymous

«диванный теоретик» — начал самоутверждаться с хамства

Извини, я не думал, что воспримешь это, как оскорбление.

Судя по его скрину, он ещё и к БД коннектится. Я не знаю как с этим в Tk, но у Qt довольно быстро можно написать неплохой клиент.

UVV ★★★★★ ()
Ответ на: комментарий от UVV
mysqltcl - interface to the MySQL database for the Tcl language
pfm - PostgreSQL graphical client using Tcl/Tk
libpgtcl - Tcl client library binding for PostgreSQL
postgresql-pltcl-9.4 - PL/Tcl procedural language for PostgreSQL 9.4
libsqlite3-tcl - SQLite 3 Tcl bindings
tcl8.6-tdbc - Tcl Database Connectivity
tcl8.6-tdbc-mysql - Tcl Database Connectivity
tcl8.6-tdbc-odbc - ODBC driver for the Tcl Database Connectivity
tcl8.6-tdbc-postgres - Tcl Database Connectivity
tcl8.6-tdbc-sqlite3 - Tcl Database Connectivity

Я БД не вижу на скрине, но пусть. Программа явно не требует супер быстрой графики и вычислений, qt ТС не знает, раз задает простые вопросы. Зачем qt и компилируемый язык для простого интерфейса?

Выбор конечно за ТСом, хозяин-барин, но я не понимаю.

anonymous ()
Ответ на: комментарий от anonymous

qt ТС не знает, раз задает простые вопросы.

На самом деле вопрос имеет место быть. То, что wizard не изменяет размер автоматом, похоже довольно таки на баг. Поскольку изменение размера автоматом как раз то, для чего существуют layout'ы.

Я бы на месте ТСа сваял простой пример и запостил в bugtracker кутешникам. Если лень, то я через день-два могу сам запостить.

UVV ★★★★★ ()
Последнее исправление: UVV (всего исправлений: 1)
Ответ на: комментарий от anonymous

Выбор конечно за ТСом, хозяин-барин, но я не понимаю.

Ну tk тоже не настолько уж распространён, чтобы с наскоку забацать на нём GUI :)

UVV ★★★★★ ()
Ответ на: комментарий от UVV

То, что wizard не изменяет размер автоматом, похоже довольно таки на баг. Поскольку изменение размера автоматом как раз то, для чего существуют layout'ы.

Кроме лайаутов есть еще всякие QSizePolicy, QLayout::SizeConstraint и пр. Так что, если где-то не выставлено, что все виджеты и лайауты по иерархии вплоть до топового диалога должны менять минимальную высоту, то и диалог меняться не будет. Можно дернуть метод adjustSize для него, но опять же это не прямое и правильное решение.

anonymous ()

Это называется Disclosure Widget или Expander. И я совершенно искренне не понимаю, какого хера этой штуки нету в Qt. 2016 год на дворе, блджад.

Stil ★★★★★ ()

А, да, в качестве костыля – ты можешь сделать еще один слот, в котором будешь делать раскрываемую часть видимой и пересчитывать геометрию. Или можно minimum-size выставить.

Stil ★★★★★ ()
Ответ на: комментарий от Stil

ты можешь сделать еще один слот, в котором будешь делать раскрываемую часть видимой и пересчитывать геометрию

Видимо, так и придется.

Или можно minimum-size выставить.

minimum-size не понятно какой ставить. На разных платформах он, по-моему, может быть разным.

SaBo ★★ ()
Ответ на: комментарий от SaBo

minimum-size не понятно какой ставить.

sizeHint у диалога бери.

anonymous ()
Ответ на: комментарий от MikeDM

Если ты не понял, то именно это у него и не работает. Я могу подтвердить, был такой же случай.

UVV ★★★★★ ()
Ответ на: комментарий от anonymous

Вопрос — какая тебе хрен разница?

false ★★★★★ ()
Ответ на: комментарий от MikeDM

А разве setVisible(false) и hide - это не одно и то же? Судя по документации и результатам (уже пробовал) - одинаково.

SaBo ★★ ()
Ответ на: комментарий от UVV

или я не понял или у него скрывается содержимое виджета, вложенные виджеты а не сам goupbox.

самое оптимальное делать stacket виджет, и по нажатию показывать один слайд с виджетами а по снятию галочки - другой слайд. Ибо играть с show hide всегда шанс вляпаться в динамические размеры.

MikeDM ★★★★★ ()

Задам довольно глупый вопрос, но убедиться стоит: все эти виджеты располагаются на компоновщике (Q{Grid,{V,H}Box,Form}Layout), а компоновщик назначен экземпляру QWizardPage через setLayout()?

XMs ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.