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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Меню + модальность  (Прочитано 4339 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Март 18, 2015, 10:53 »

Добрый день

При редактировании текста команды Copy/Paste должны быть enabled в меню - но сделать это не удается если текущее окно модально. Кроме того есть еще парочка hotkeys которая тоже должна быть enabled. На 4.7.4 я делал модальное окно родителем меню бара. Это работает и вроде "легально" - но страшно геморройно и по-разному на Mac и Вындоуз. Поэтому при переходе на 5.4 я этот уродливый код снес (в загажник). Может есть штатные средства?

Спасибо
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Март 18, 2015, 11:33 »

Т.е. Вам хочется, чтобы hot-keys главного окна были доступны в диалоге?
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Март 18, 2015, 11:49 »

Т.е. Вам хочется, чтобы hot-keys главного окна были доступны в диалоге?
Сделать доступность (клавиша работает) не проблема (я помню Ваши советы). Но что с меню? Пример: юзер открывает "Edit" меню, там Copy/Paste серенькие. Нажимает Ctl-V - paste работает. Нехорошо
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Март 18, 2015, 11:53 »

Вы не ответили на вопрос и совсем запутали.
Как юзер может открыть меню главного (?) окна из модального?
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Март 18, 2015, 12:43 »

Вы не ответили на вопрос и совсем запутали.
Ответ на вопрос: да, я хочу чтобы несколько команд меню были доступны и из модальных диалогов и работали как по клавише, так и из меню

Как юзер может открыть меню главного (?) окна из модального?
На OSX одно меню приложения на всех. На Вындоуз считаем что меню тоже всегда одно и принадлежит видимому QMainWindow. Т.е. я всегда создаю один QMenuBar
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 18, 2015, 12:48 »

На OSX одно меню приложения на всех. На Вындоуз считаем что меню тоже всегда одно и принадлежит видимому QMainWindow. Т.е. я всегда создаю один QMenuBar
Но это совершенно не означает, что модальное окно должно быть в контексте главного окна.
Именно модальность перекрывает этот контекст.
Делайте такое окно панелью (QDockWidget), но никак не модальным.
Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Март 18, 2015, 13:35 »

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

Делайте такое окно панелью (QDockWidget), но никак не модальным.
Модальных диалогов много, и многие из них имеют текстовые поля. Все на QDockWidget точно не переделать. А снабжать каждое куцей менюхой из неск айтемов - несерьезно.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Март 18, 2015, 13:44 »

Модальных диалогов много, и многие из них имеют текстовые поля. Все на QDockWidget точно не переделать. А снабжать каждое куцей менюхой из неск айтемов - несерьезно.
Притягивать меню главного окна к диалогу, имхо, хак, да и зачем Непонимающий

P.S. Ещё раз повторю. Модальный диалог имеет свой, отличных от других контекст.
Своими сомнительными действиями Вы нарушаете целостность GUI и можете сконфузить пользователя.
Мало того, на других DE есть темы, в которых при появлении модального окна, основное окно затеняется.
« Последнее редактирование: Март 18, 2015, 13:58 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Март 18, 2015, 14:46 »

Ладно, давайте оставим "идеологическую плоскость" и посмотрим как сделано в Qt
Код
C++ (Qt)
bool QCocoaMenuBar::shouldDisable(QCocoaWindow *active) const
{
   if (active && (active->window()->modality() == Qt::NonModal))
       return false;
 
   if (m_window == active) {
       // modal window owns us, we should be enabled!
       return false;
   }
 
   QWindowList topWindows(qApp->topLevelWindows());
   // When there is an application modal window on screen, the entries of
   // the menubar should be disabled. The exception in Qt is that if the
   // modal window is the only window on screen, then we enable the menu bar.
   foreach (QWindow *w, topWindows) {
       if (w->isVisible() && w->modality() == Qt::ApplicationModal) {
           // check for other visible windows
           foreach (QWindow *other, topWindows) {
               if ((w != other) && (other->isVisible())) {
                   // INVARIANT: we found another visible window
                   // on screen other than our modalWidget. We therefore
                   // disable the menu bar to follow normal modality logic:
                   return true;
               }
           }
 
           // INVARIANT: We have only one window on screen that happends
           // to be application modal. We choose to enable the menu bar
           // in that case to e.g. enable the quit menu item.
           return false;
       }
   }
 
   return true;
}
 
Опять парента перебрасывать - ну капитальный невдобняк  Плачущий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Март 18, 2015, 14:51 »

Притягивать меню главного окна к диалогу, имхо, хак, да и зачем Непонимающий
Основная платформа Mac, а там всегда было одно меню на все приложение. Поэтому если hotkeys не отражены в меню - выглядит как явный баг. И меню должно подмигивать если hotkey сработал. А Вындоуз перетопчется, невелика цаца

Edit: вот скриншотик как это выглядит
« Последнее редактирование: Март 20, 2015, 13:40 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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