Russian Qt Forum
Ноябрь 05, 2024, 22:01
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину) (Прочитано 7779 раз)
yarick
Гость
Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
:
Ноябрь 01, 2012, 21:25 »
Виджеты верхнего уровня, как и QMainWindow - это всё окна, имеющие определённый порядок отображения относительно дргу друга (z - показатель глубины).
Кликая на один из виджетов - мы переключаем его на передний план.
Допустим, все наши виджеты - верхнего уровня, т.е. я задал им параметр Qt::WindowStaysOnTopHint
Один из виджетов прозрачный и я хочу использовать его для рисования. И хочу чтобы он отображался поверх топовых окон, но при этом не получал фокуса при клике на него, т.е. клики "проходили" сквозь виджет. Возможно ли такое?
Установить виджет поверх всех остальных топовых виджетов можно через setActive. Однако он захватит фокус
Записан
Bepec
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #1 :
Ноябрь 01, 2012, 21:27 »
дырку делай в нём. На месте курсора.
Записан
yarick
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #2 :
Ноябрь 01, 2012, 21:37 »
Цитата: Bepec от Ноябрь 01, 2012, 21:27
дырку делай в нём. На месте курсора.
Это странно будет выглядеть... хоть и 1 пиксель, но мне такое решение не нравиться
Записан
carrygun
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #3 :
Ноябрь 02, 2012, 11:15 »
Но он же прозрачный.
Записан
Bepec
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #4 :
Ноябрь 02, 2012, 12:15 »
Человек просто не читает предложений.
Сделать в полностью прозрачном виджете дырку... И это как то будет выглядеть? Мдамс.
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #5 :
Ноябрь 02, 2012, 12:32 »
Цитата: Bepec от Ноябрь 02, 2012, 12:15
Сделать в полностью прозрачном виджете дырку... И это как то будет выглядеть? Мдамс.
Интересно, а как ты это предлагаешь реализовать?
Цитата: yarick от Ноябрь 01, 2012, 21:25
И хочу чтобы он отображался поверх топовых окон, но при этом не получал фокуса при клике на него, т.е. клики "проходили" сквозь виджет.
Чтобы клики "проходили" сквозь виджет, нужно отловить клик и переслать его соответствующему окну.
Чтобы не получал фокус выстави ему setFocusPolicy( Qt::NoFocus );
«
Последнее редактирование: Ноябрь 02, 2012, 12:37 от GreatSnake
»
Записан
Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #6 :
Ноябрь 02, 2012, 13:01 »
Прозрачность 100%, рисуем на QPixmap чооорную точку, вызываем createHeuristicMask для чёрного. Получается дырка. Вызываем setMask.
Если пойти дальше, то сделать виджет размером xN, чтобы дырка могла быть подставлена в любой угол экрана. И передвигать виджет вместе с мышкой. (ибо расчёт маски на каждое движение нахожу плохим и неоптимальным решением.)
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #7 :
Ноябрь 02, 2012, 13:06 »
Ну-ну, а двигать окно это оптимально? Абсолютно бредовое решение.
Записан
Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #8 :
Ноябрь 02, 2012, 13:14 »
Я конечно извиняюсь, но передвижение виджета... Обычное передвижение займёт минимум ресурсов. Взамен даёт реализацию дырки.
Могу я увидеть ваше решение этой проблемы?
PS "Не можешь сделать лучше - хотя бы не сделай хуже" ©
update: перечитал желание ТСса - возможно проще будет NoFocus и передача евента в класс-менеджер.
PPS но вопрос о дырке и о данной реализации к GreatSnake остаётся открытым.
«
Последнее редактирование: Ноябрь 02, 2012, 13:18 от Bepec
»
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #9 :
Ноябрь 02, 2012, 13:25 »
Цитата: Bepec от Ноябрь 02, 2012, 13:14
Я конечно извиняюсь, но передвижение виджета... Обычное передвижение займёт минимум ресурсов. Взамен даёт реализацию дырки.
Если бы ты хотя бы немного представлял как организована оконная система, то бы не делал таких заявлений.
Цитировать
Могу я увидеть ваше решение этой проблемы?
См.
выше
.
На самом деле, если ТС захочет сделать задуманное кросс-платформенным, то мне его жаль, ибо работы будет немерянно и не факт, что всё будет работать идеально.
«
Последнее редактирование: Ноябрь 02, 2012, 13:44 от GreatSnake
»
Записан
Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #10 :
Ноябрь 02, 2012, 13:37 »
yarick
, скиньте небольшой проект, поковыряемся
Записан
Bepec
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #11 :
Ноябрь 02, 2012, 13:39 »
to GreatSnake - у вас ссылка указывает на моё сообщение темы. Или вообще на начало темы... Или в опере скрипт неправильно отрихтовывает?
PS но в принципе я понял. Это решение хорошо, но... Но если под виджетом будет "чужое окно", тогда пересылка ему QMouseEvent будет затруднительным.
PPS скиньте ссылочку на организацию оконной системы(желательно W), авось просветлюсь.
«
Последнее редактирование: Ноябрь 02, 2012, 13:42 от Bepec
»
Записан
yarick
Гость
Re: Как поменять местами 2 виджета-окна верхнего уровня? (изменить z глубину)
«
Ответ #12 :
Ноябрь 02, 2012, 14:44 »
Цитата: Igors от Ноябрь 02, 2012, 13:37
yarick
, скиньте небольшой проект, поковыряемся
Да ладно, я подумал что всё равно возникнут проблемы, даже если дырку сделать и фокус возвращать - всё равно проблема будет. Я предоставлю возможность пользователю делать любое окно поверх других (топовым), соответственно над таким окном будет не установить виджет с нарисованными стрелочками без передачи фокуса... Впрочем даже если и эту проблему решить - это кривая реализация и кросслпатформенность пострадает.
Я решил что лучше буду в окнах рисовать стрелочки, а если из одного окна в другое ведём стрелочку - то она будет обрываться между окнами - ну и ладно. Если окна рядом стоят - это не так заметно
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...