Название: примерчик windowflags (Qt 5.2 Windows) Отправлено: Igors от Июня 28, 2014, 12:11 Добрый день
- oткомпилите и запустите пример windowflags - выберите тип окна Tool - попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно - выберите тип окна Popup, затем снова Tool - опять попробуйте перекрыть - теперь не выходит (правильно) - да, и чего это tool принимает/теряет фокус ??? Буги-вуги ??? Edit: виноват, пример все-таки изменен Код Или можно оставить парента и создать еще одно окно Qt::Window с тем же парентом - результат тот же Название: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: kambala от Июня 28, 2014, 13:40 Цитировать попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно в 5.3 не получается, винда 8.1Цитировать да, и чего это tool принимает/теряет фокус потому что это не мак осНазвание: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: Igors от Июня 28, 2014, 15:41 Проверил с 5.3.1 (desktop), то же самое
Цитировать попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно в 5.3 не получается, винда 8.1Цитировать да, и чего это tool принимает/теряет фокус потому что это не мак осНазвание: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: kambala от Июня 28, 2014, 18:41 Цитировать попробуйте перекрыть tool окном управления - получается (аттач) хотя не должно в 5.3 не получается, винда 8.1Цитировать да, и чего это tool принимает/теряет фокус потому что это не мак осНазвание: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: Igors от Июня 29, 2014, 11:08 а что, есть закон, запрещающий тул-окнам получать фокус в любой ОС? в эппле решили, что таким окнам фокус не нужен, в мс — наоборот. не вижу причины негодовать по этому поводу. Да пусть решают где что хотят, но Qt кросс-платформенный фреймворк, и значит мы вправе ожидать одинакового поведения окон (по крайней мере базового). Какой смысл в таком Qt::Tool, чем же оно отличается от Qt::Window? Объяснения, дескать, "платформа" не катят - напр окно не может перекрыть своего парента - на той же платформе, т.е. ф-ционал этот есть.Ладно, как исправлять? (вопрос со слабой надеждой на ответ :)) Название: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: kambala от Июня 29, 2014, 12:28 писать баг репорт :)
Название: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: Igors от Июня 29, 2014, 12:35 писать баг репорт :) Цитировать пишет гневное письмо в техподдержку, откуда приезжают дяденьки на джипе и за $10000 соглашаются решить проблему. Расстреливают Qt::Tool из автомата и уезжают обратно. :)Название: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: Igors от Июля 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. С интересом послушаю лучшее (или даже просто другое) решение. Название: Re: примерчик windowflags (Qt 5.2 Windows) Отправлено: vulko от Июля 18, 2014, 13:51 Код: Во всяком случае в Вындоуз это выполняется для всех окон (parent не перекрывает child'а), а не только с флагом Qt::Tool. Но это никак не спасает от перекрытия тул окна всеми кто не его child. а с какого окно не может перекрыть чужое окно? все очень даже логично. Код: If there isn't a parent, you may consider using Qt::WindowStaysOnTopHint as well. Нередко бывают случаи, когда нужно окно которое всегда поверх всего. Даже когда фокус из него ушел. Советую посмотреть в сторону QDialog. Код: С интересом послушаю лучшее (или даже просто другое) решение. |