Russian Qt Forum
Сентябрь 30, 2024, 12:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как убрать кнопки сворачивания-разворачивания в QDialog ?  (Прочитано 29193 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Март 29, 2009, 17:41 »

Здравствуйте!


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

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

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

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

this->setWindowFlags(Qt::Dialog);

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


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

Собираю информацию по крупицам
http://webhamster.ru
_OLEGator_
Гость
« Ответ #1 : Март 29, 2009, 18:54 »

Посмотри %QTDIR%\examples\widgets\windowflags\

Оставить только кнопку закрытия, такие флаги:
 - Qt::Dialog | Qt::WindowTitleHint
 - Qt::Dialog | Qt::WindowCloseButtonHint
 - Qt::Dialog | Qt::WindowSystemMenuHint
Записан
Rcus
Гость
« Ответ #2 : Март 29, 2009, 19:44 »

KWin вообще пофиг на эти флаги Улыбающийся если у окна можно изменять размеры, то кнопка maximize будет в любом случае. При беглом осмотре "лечится" при помощи setFixedSize.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #3 : Март 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();

то всеравно кнопка сворачивания не исчезает. Блин не могу понять чо не так делаю.
« Последнее редактирование: Март 29, 2009, 20:58 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
Rcus
Гость
« Ответ #4 : Март 29, 2009, 21:01 »

Если у окна нет parent'а, то так и будет. Насчет setFixedSize можно глянуть в ./src/gui/dialogs/qmessagebox.cpp /*собственно вид message box'ов и навел меня на возможность скрытия кнопки максимизации*/, но в общем да - считается минимальный размер layout'а.
Записан
shadone
Гость
« Ответ #5 : Апрель 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 поддерживает все флаги).
« Последнее редактирование: Апрель 01, 2009, 15:04 от ddenis » Записан
Олег
Гость
« Ответ #6 : Апрель 02, 2009, 20:19 »

В конструкторе пишешь:
YourClass::YourClass(QWidget * parent = 0, Qt::Dialog);
И всё)
Проверено в Qt 4.3.2
Записан
jurtal
Гость
« Ответ #7 : Июль 16, 2009, 07:58 »

А возможно ли вообще убрать все кнопки (сворачивания, разворачивания, итд)? Кнопку закрытия окна не удается убирать.
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #8 : Май 13, 2011, 12:47 »

Используй флаги
Записан

Qt 5.11.0, Win, MinGW
Alucard
Гость
« Ответ #9 : Май 13, 2011, 12:48 »

я думаю за два года уже любой смог бы найти/понять
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #10 : Май 13, 2011, 12:58 »

Цитировать
я думаю за два года уже любой смог бы найти/понять

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

Qt 5.11.0, Win, MinGW
Alucard
Гость
« Ответ #11 : Май 13, 2011, 13:10 »

а ваше по теме, до вашего ответа не о том же речь шла?)
Записан
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #12 : Май 13, 2011, 14:18 »

Что то по последнему сообщению не видно что человек понял.
Записан

Qt 5.11.0, Win, MinGW
AlexMad
Гость
« Ответ #13 : Март 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
Нужно было еще Qt::WindowTitleHint  добавить.
« Последнее редактирование: Март 04, 2012, 12:00 от AlexMad » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.197 секунд. Запросов: 23.