Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QMainWindow

Автор: wdefik 3.4.2010, 1:12

Возможно ли после того, как в QMainWindow методом setMainWidget(QWidget*) уже установлен главный виджет, назначить ему в качестве главного виджета другой, а в общем случае просто жонглировать виджетами, причем так, чтобы все было корректно? :)

или, может быть, есть альтернативные подходы? :)




Автор: kwisp 3.4.2010, 8:54

wdefik,
что за метод такой setMainWidget(QWidget*) ?
не нашёл такого в документации
http://qt.nokia.com/doc/4.6/qmainwindow-members.html
ты имел ввиду
setCentralWidget ( QWidget * )
или
setMenuWidget ( QWidget * )
?
однако в обоих случаях, главное окно становится хозяином/владельцем устанавливаемых виджетов и удаляет их(освобождает память по указателю) в соответствующее время - обычно при собственном освобождении памяти.

можно попробовать уставливать виджет, а когда нужно установить другой
менять ему хозяина/владельца к примеру на 0 и затем в ручную освобождать память,
затем устанавливать другой.
написать тест и узнать можно так или нет.
пока других способов мне не видно.

Автор: wdefik 3.4.2010, 13:25

Да, setCentralWidget(QWidget*) - прошу прощения, ночь, утсалость.. :)

Да, кажется, такой вариант приемлем. спасибо :)

Автор: kwisp 3.4.2010, 14:38

wdefik,
ты пробовал или наугад сказал что вариант приемлем?

Автор: igor_bogomolov 3.4.2010, 15:45

wdefik, может в качестве центрального виджета установить QStackedWidget

Автор: kwisp 3.4.2010, 15:54

Цитата(kwisp @ 3.4.2010, 9:54) *
пока других способов мне не видно.
Цитата(igor_bogomolov @ 3.4.2010, 16:45) *
может в качестве центрального виджета установить QStackedWidget

во! увидел

Автор: wdefik 3.4.2010, 16:32

Цитата(kwisp @ 3.4.2010, 14:38) *
wdefik,
ты пробовал или наугад сказал что вариант приемлем?


Для простейшего приложения ничего страшного не происходит.
Мой проект немного разросся, так что я пока не могу сказать как это работает для более сложных вариантов.

Цитата(igor_bogomolov @ 3.4.2010, 15:45) *
wdefik, может в качестве центрального виджета установить QStackedWidget


Дело в том, что в качестве виджета, который будет являться центральным, будут использоваться несколько OpenGl-ных сцен (классы наследуются от QGLWidget), которые могут со временем оказаться тяжеловесными, но переключение между ними будет происходить не слишком часто, так что по идее нет смысла все время хранить эти объекты. То есть в моем случае выгоднее затратить некоторое время на создание сцены, чем хранить его все время.

Означает ли это, что я смогу в QStackedWidget держать указатели на нужные виды сцен и динамически создавать\разрушать их при этом выбирая новую для отображения?

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)