Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Март 29, 2009, 17:41



Название: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: xintrea от Март 29, 2009, 17:41
Здравствуйте!


Имею объект, наследуемый от QDialog. Нужно, чтобы в заголовке его окна была только кнопка закрытия. Ковыряю ассистент, там написано, что можно выставить флаг через метод setWindowFlags().

Смотрю, какой флаг мне нужен.

Цитировать
Qt::Dialog - Указывает, что виджет - окно, которое должно быть декорировано как диалог (т.е., обычно без кнопок сворачивания или разворачивания на заголовке). Это умалчиваемый тип для QDialog.

Странно, получается, что окно QDialog автоматически должно декорироваться без кнопок сворачивания-разворачивания. Но на всякий случай пробую в конструкторе строку

this->setWindowFlags(Qt::Dialog);

Результата никакого. Стал пробовать другие флаги (Qt::CustomizeWindowHint и т.д.) - добиться, чтобы исчезли кнопки сворачивания-разворачивания не смог.


Вопрос. Какие флаги надо выставить окну, чтобы оно имело только кнопку закрытия?


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: _OLEGator_ от Март 29, 2009, 18:54
Посмотри %QTDIR%\examples\widgets\windowflags\

Оставить только кнопку закрытия, такие флаги:
 - Qt::Dialog | Qt::WindowTitleHint
 - Qt::Dialog | Qt::WindowCloseButtonHint
 - Qt::Dialog | Qt::WindowSystemMenuHint


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: Rcus от Март 29, 2009, 19:44
KWin вообще пофиг на эти флаги :) если у окна можно изменять размеры, то кнопка maximize будет в любом случае. При беглом осмотре "лечится" при помощи setFixedSize.


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: xintrea от Март 29, 2009, 20:52
KWin вообще пофиг на эти флаги :) если у окна можно изменять размеры, то кнопка maximize будет в любом случае. При беглом осмотре "лечится" при помощи setFixedSize.

То-то я думаю, почему в примере examples\widgets\windowflags\ не могу найти комбинации, при которой у окна только кнопка закрытия остается.

А как вы предлагаете setFixedSize() использовать? Вычислять размеры основного layout, и указывать их в качестве размеров окна?

И еще... В примере examples\widgets\windowflags\ при использовании комбинации флагов Qt::Dialog | Qt::WindowTitleHint, исчезает кнопка сворачивания окна. А если я выставляю  this->setWindowFlags(Qt::Dialog | Qt::WindowTitleHint) в конструкторе своего объекта, то у меня кнопка сворачивания всеравно видна. Непойму, в какой момент надо устанавливать флаги, чтобы они применялись?

UPD: Щас проверил, даже если устанавливать флаги после работы конструктора, например в вызывающем коде

Код
C++ (Qt)
EditorFindDialog find_dialog;
find_dialog.setWindowFlags(Qt::Dialog | Qt::WindowTitleHint);
find_dialog.exec();

то всеравно кнопка сворачивания не исчезает. Блин не могу понять чо не так делаю.


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: Rcus от Март 29, 2009, 21:01
Если у окна нет parent'а, то так и будет. Насчет setFixedSize можно глянуть в ./src/gui/dialogs/qmessagebox.cpp /*собственно вид message box'ов и навел меня на возможность скрытия кнопки максимизации*/, но в общем да - считается минимальный размер layout'а.


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: shadone от Апрель 01, 2009, 15:01
Посмотри %QTDIR%\examples\widgets\windowflags\

Оставить только кнопку закрытия, такие флаги:
 - Qt::Dialog | Qt::WindowTitleHint
 - Qt::Dialog | Qt::WindowCloseButtonHint
 - Qt::Dialog | Qt::WindowSystemMenuHint
почти правильно. Еще обязательно добавить Qt::CustomizeWindowHint - без него остальные хинты игнорируются.

т.е. должно быть: Qt::Dialog |  Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint

В X11 эти флаги только подсказывают window manager'у что делать и что реально будет показано зависит от wm (kwin например надо исправлять, в то время как gnome/metacity поддерживает все флаги).


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: Олег от Апрель 02, 2009, 20:19
В конструкторе пишешь:
YourClass::YourClass(QWidget * parent = 0, Qt::Dialog);
И всё)
Проверено в Qt 4.3.2


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: jurtal от Июль 16, 2009, 07:58
А возможно ли вообще убрать все кнопки (сворачивания, разворачивания, итд)? Кнопку закрытия окна не удается убирать.


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: kolob от Май 13, 2011, 12:47
Используй флаги


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: Alucard от Май 13, 2011, 12:48
я думаю за два года уже любой смог бы найти/понять


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: kolob от Май 13, 2011, 12:58
Цитировать
я думаю за два года уже любой смог бы найти/понять

Ну мало ли. Каждый день на форум заходят новички. По себе не надо всех остальных судить.


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: Alucard от Май 13, 2011, 13:10
а ваше по теме, до вашего ответа не о том же речь шла?)


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: kolob от Май 13, 2011, 14:18
Что то по последнему сообщению не видно что человек понял.


Название: Re: Как убрать кнопки сворачивания-разворачивания в QDialog ?
Отправлено: AlexMad от Март 04, 2012, 11:48
Посмотри %QTDIR%\examples\widgets\windowflags\

Оставить только кнопку закрытия, такие флаги:
 - Qt::Dialog | Qt::WindowTitleHint
 - Qt::Dialog | Qt::WindowCloseButtonHint
 - Qt::Dialog | Qt::WindowSystemMenuHint
почти правильно. Еще обязательно добавить Qt::CustomizeWindowHint - без него остальные хинты игнорируются.

т.е. должно быть: Qt::Dialog |  Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint

В X11 эти флаги только подсказывают window manager'у что делать и что реально будет показано зависит от wm (kwin например надо исправлять, в то время как gnome/metacity поддерживает все флаги).

Извиняюсь за поднятие старой темы, но у меня вопрос противоположный - мне надо, чтобы были кнопки сворачивания и разворачивания, а кнопку закрытия нужно убрать. То есть, мне нужно, чтобы пользователь не закрыл вспомогательного окна, но мог бы его сворачивать и передвигать.
Код:
  winReport->setWindowFlags(Qt::CustomizeWindowHint);
  winReport->setWindowFlags(Qt::WindowMinMaxButtonsHint);
Вот так в линуксе все прекрасно работает. Но конечный пользователь сидит в виндовс. Собираю этот же проет под виндой - и кнопка закрытия присутствует :(

Нашел: http://www.prog.org.ru/index.php?topic=20708.msg141589#msg141589 (http://www.prog.org.ru/index.php?topic=20708.msg141589#msg141589)
Нужно было еще Qt::WindowTitleHint  добавить.