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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: примерчик windowflags (Qt 5.2 Windows)  (Прочитано 5321 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Июнь 28, 2014, 12:11 »

Добрый день

- oткомпилите и запустите пример windowflags  
- выберите тип окна Tool
- попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно
- выберите тип окна Popup, затем снова Tool
- опять попробуйте перекрыть - теперь не выходит (правильно)
- да, и чего это tool принимает/теряет фокус  Непонимающий

Буги-вуги  Непонимающий

Edit: виноват, пример все-таки изменен

Код
C++ (Qt)
ControllerWindow::ControllerWindow()
{
//    previewWindow = new PreviewWindow(this);   // оригинал    
   previewWindow = new PreviewWindow(0);   // измените так
...
 
Или можно оставить парента и создать еще одно окно Qt::Window с тем же парентом - результат тот же

« Последнее редактирование: Июнь 28, 2014, 15:37 от Igors » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



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

Цитировать
попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно
в 5.3 не получается, винда 8.1
Цитировать
да, и чего это tool принимает/теряет фокус
потому что это не мак ос
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Проверил с 5.3.1 (desktop), то же самое

Цитировать
попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно
в 5.3 не получается, винда 8.1
Потому что в примере окно управления парент. Замените его на ноль (см Edit первого поста)

Цитировать
да, и чего это tool принимает/теряет фокус
потому что это не мак ос
Очень убедительно  Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Июнь 28, 2014, 18:41 »

Цитировать
попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно
в 5.3 не получается, винда 8.1
Потому что в примере окно управления парент. Замените его на ноль (см Edit первого поста)
да, теперь перекрывает
Цитировать
да, и чего это tool принимает/теряет фокус
потому что это не мак ос
Очень убедительно  Улыбающийся
а что, есть закон, запрещающий тул-окнам получать фокус в любой ОС? в эппле решили, что таким окнам фокус не нужен, в мс — наоборот. не вижу причины негодовать по этому поводу.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

а что, есть закон, запрещающий тул-окнам получать фокус в любой ОС? в эппле решили, что таким окнам фокус не нужен, в мс — наоборот. не вижу причины негодовать по этому поводу.
Да пусть решают где что хотят, но Qt кросс-платформенный фреймворк, и значит мы вправе ожидать одинакового поведения окон (по крайней мере базового). Какой смысл в таком Qt::Tool, чем же оно отличается от Qt::Window? Объяснения, дескать, "платформа" не катят - напр окно не может перекрыть своего парента - на той же платформе, т.е. ф-ционал этот есть.

Ладно, как исправлять? (вопрос со слабой надеждой на ответ  Улыбающийся)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Июнь 29, 2014, 12:28 »

писать баг репорт Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

писать баг репорт Улыбающийся
Цитировать
пишет гневное письмо в техподдержку, откуда приезжают дяденьки на джипе и за $10000 соглашаются решить проблему. Расстреливают Qt::Tool из автомата и уезжают обратно.
Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Июль 06, 2014, 18:22 »

Хотя энтузиазма не видно - все же надо делиться решением. Прильнем к источнику наслаждения
Qt::Tool
Цитировать
If there is a parent, the tool window will always be kept on top of it.
Во всяком случае в Вындоуз это выполняется для всех окон (parent не перекрывает child'а), а не только с флагом Qt::Tool. Но это никак не спасает от перекрытия тул окна всеми кто не его child.
 
Цитировать
If there isn't a parent, you may consider using Qt::WindowStaysOnTopHint as well.
А что же "документация" умалчивает (стыдливо) о том что такое окно будет торчать впереди ВСЕХ Вындоуз окон? Т.е. при переключении на др задачу они не перекрываются. "Заставь дурака богу молиться - он и лоб разобьет"

Пришлось делать так:
 - выставляю Qt::WindowStaysOnTopHint
 - когда приложение теряет фокус (или открывается файл/фонт диалог) пробегаюсь по всем тул окнам и в нативняке снимаю флаг HWND_TOPMOST. Воспользоваться setWindowFlags не удается т.к. он скрывает видимые окна. Потом соответственно возвращаю флаг HWND_TOPMOST.

С интересом послушаю лучшее (или даже просто другое) решение.
Записан
vulko
Гость
« Ответ #8 : Июль 18, 2014, 13:51 »

Код:
Во всяком случае в Вындоуз это выполняется для всех окон (parent не перекрывает child'а), а не только с флагом Qt::Tool. Но это никак не спасает от перекрытия тул окна всеми кто не его child.

а с какого окно не может перекрыть чужое окно? все очень даже логично.


Код:
If there isn't a parent, you may consider using Qt::WindowStaysOnTopHint as well.
Флаг говорит сам за себя - Window Stays On Top.
Нередко бывают случаи, когда нужно окно которое всегда поверх всего. Даже когда фокус из него ушел.

Советую посмотреть в сторону QDialog.

Код:
С интересом послушаю лучшее (или даже просто другое) решение. 
попкорн не забудь))) решение чего? в чем вопрос?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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