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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отключить в окне кнопку "Закрыть"  (Прочитано 6373 раз)
Paramon
Гость
« : Июнь 25, 2014, 11:05 »

Пробовал так, но окно просто прячется. К winapi прибегать не хотелось бы.
Код:
this->setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | Qt::WindowTitleHint | Qt::Dialog | Qt::WindowMinimizeButtonHint | Qt::CustomizeWindowHint);

Если послать после установки флагов this->show(); - то работает, но это как-то неправильно.
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #1 : Июнь 25, 2014, 11:40 »

closeEvent
Записан
Paramon
Гость
« Ответ #2 : Июнь 25, 2014, 12:12 »

И как мне это поможет отключить (сделать недоступными) кнопку [X] в правом верхнем углу и пункт в системном меню? Строит глазки
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #3 : Июнь 25, 2014, 15:03 »

Paramon, я очень давно делал вот так, но это действительно неправильно и некрасиво.

Код
C++ (Qt)
setWindowFlags(((windowFlags() | Qt::CustomizeWindowHint)& ~Qt::WindowCloseButtonHint));
show();

А товарищ Johnik имел в виду, видимо, что стоит попробовать перехватит closeEvent и что-нибудь с этим сделать, правда это не то, что вам надо. Я так понимаю, что кнопка должна быть недоступна.
« Последнее редактирование: Июнь 25, 2014, 15:07 от Zerkin » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Июнь 25, 2014, 15:21 »

А как правильно, если setWindowFlags неправильно?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Июнь 25, 2014, 15:23 »

Довольно-таки странное желание коли создаёшь окно типа Dialog.
Записан

Qt 5.11/4.8.7 (X11/Win)
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #6 : Июнь 25, 2014, 15:26 »

А как правильно, если setWindowFlags неправильно?

Не в смысле, что это "неправильно" =) Как сделать это нормально без всяких сворачиваний лично мне неизвестно.

Могу предложить еще один костыль для винды.

Код
C++ (Qt)
HMENU menu = ::GetSystemMenu(this->winId(), FALSE);
      ::DeleteMenu(menu, SC_CLOSE, MF_BYCOMMAND);
      ::EnableMenuItem(menu, SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

где this - ваш оконный виджет

Собственно взято это решение в своё время вот отсюда.
http://www.qtcentre.org/threads/9348-Disable-Close-button-%28X%29-of-a-QDialog
« Последнее редактирование: Июнь 25, 2014, 15:42 от Zerkin » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Июнь 25, 2014, 15:31 »

насколько я помню, если вызывать setWindowFlags() до show()/exec(), то всё будет в порядке.
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #8 : Июнь 25, 2014, 15:37 »

насколько я помню, если вызывать setWindowFlags() до show()/exec(), то всё будет в порядке.

Определенно =) А если виджет уже отшоувен? У автора именно такая ситуация, насколько я понимаю. Если флаги меняются уже после первоначальной инициализации и при активном зашоувленном окне?
« Последнее редактирование: Июнь 25, 2014, 15:40 от Zerkin » Записан
Paramon
Гость
« Ответ #9 : Июнь 26, 2014, 09:42 »

Спасибо за ответы.
Я забыл, что когда давным-давно пытался сделать то же на winapi - столкнулся с той же проблемой. Помогало только сворачивание-разворачивание окна. Как решил (и решил ли) уже не помню.  Грустный
Записан
Zerkin
Чайник
*
Offline Offline

Сообщений: 98


Просмотр профиля
« Ответ #10 : Июнь 26, 2014, 10:45 »

Спасибо за ответы.
Я забыл, что когда давным-давно пытался сделать то же на winapi - столкнулся с той же проблемой. Помогало только сворачивание-разворачивание окна. Как решил (и решил ли) уже не помню.  Грустный

Сейчас протестировал один свой проект, прикрутил к нему эту фичу с HMENU. На винде работает на ура.
Записан
Paramon
Гость
« Ответ #11 : Июнь 26, 2014, 16:01 »

Сейчас протестировал один свой проект, прикрутил к нему эту фичу с HMENU. На винде работает на ура.
Если это вообще возможно реализовать - то хотелось бы силами Qt без winapi.
Вроде инсталлятор 5.х, написанный на себе, отключает кнопку "закрыть".
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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