Russian Qt Forum
Ноябрь 23, 2024, 11:42
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
QDockWidget определение верхнего
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QDockWidget определение верхнего (Прочитано 6905 раз)
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
QDockWidget определение верхнего
«
:
Май 19, 2020, 23:37 »
Доброго времени суток!
Существует QMainWindow, в котором есть несколько QDockWidget. Я их могу "собрать" в один, путём перетаскивания друг на друга. Получается что-то подобное QTabWidget. Понятно, что в разные моменты времени каждый из этих QDockWidget может стать "верхним" (допустим, кликом на него).
А может и несколько (если я мышкой их "растащу" по QMainWindow)
Вопрос: как программно можно определить какой из этих виджетов "верхний"? Или несколько из них.
Записан
Digital Art
navrocky
Гипер активный житель
Offline
Сообщений: 817
Погроммист
Re: QDockWidget определение верхнего
«
Ответ #1 :
Май 29, 2020, 18:50 »
Думаю надо смотреть в сторону QEvent::ShowEvent. Ловить это сообщение в твоем QWidget, который вставлен в док
Записан
Гугль в помощь
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QDockWidget определение верхнего
«
Ответ #2 :
Май 29, 2020, 19:10 »
Цитата: navrocky от Май 29, 2020, 18:50
Думаю надо смотреть в сторону QEvent::ShowEvent. Ловить это сообщение в твоем QWidget, который вставлен в док
Не понял задумку, ну вот юзверь тыкнул мышей в один из виждетов и тот стал "верхним", но никаких ShowEvent не получим.
Неск лет назад была подобная задача и я не нашел ничего лучшего чем нырнуть в нативняк (там сканировать окна в Z-order)
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Re: QDockWidget определение верхнего
«
Ответ #3 :
Май 30, 2020, 01:08 »
С Z-ордером тоже не всё так однозначно. Хотя решение должно быть...
Записан
Digital Art
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: QDockWidget определение верхнего
«
Ответ #4 :
Май 30, 2020, 15:10 »
Скорее тут надо смотреть в сторону paintEvent, он не вызывается для перекрытых виджетов...
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QDockWidget определение верхнего
«
Ответ #5 :
Май 30, 2020, 15:19 »
Цитата: Пантер от Май 30, 2020, 15:10
Скорее тут надо смотреть в сторону paintEvent, он не вызывается для перекрытых виджетов...
По крайней мере в общем случае (DoubleBuffering) вызывается. Хотя это не так уж важно. Напр есть 3 окна, они как-то перекрываются, все получают paintEvent. И.. что с того?
Цитата: tux от Май 30, 2020, 01:08
Хотя решение должно быть...
Откуда такая уверенность?
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Re: QDockWidget определение верхнего
«
Ответ #6 :
Май 30, 2020, 15:46 »
Цитата: Igors от Май 30, 2020, 15:19
Откуда такая уверенность?
Сестра Надежда ещё не умерла.
Просто, если что-то можно сложить в стопку, то должно же как то отличаться верхнее, от не верхнего.
Я сомневаюсь, что я первый обратил на это внимание. Складывание доков в стопку вроде было еще в 4-ке...
P.S. А вот насчёт paintEvent надо проверить. Даже при перекрываемых окнах, у полностью открытого верхнего дока область отрисовки будет либо равной этому доку либо наибольшей у нескольких.
«
Последнее редактирование: Май 30, 2020, 15:51 от tux
»
Записан
Digital Art
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: QDockWidget определение верхнего
«
Ответ #7 :
Май 30, 2020, 16:38 »
Цитата: tux от Май 30, 2020, 15:46
P.S. А вот насчёт paintEvent надо проверить. Даже при перекрываемых окнах, у полностью открытого верхнего дока область отрисовки будет либо равной этому доку либо наибольшей у нескольких.
Не стоит надеяться что, мол, рисование (области) не вызывается "для перекрытого другими", это давно уже не так. Qt кеширует рисование, напр если перекрытие изменилось - событие перерисовки не придет, будет использован кеш.
Если нужен только "самый верхний", то может просто qApp->activeWindow() ?
Записан
tux
Global Moderator
Бывалый
Offline
Сообщений: 404
Re: QDockWidget определение верхнего
«
Ответ #8 :
Май 30, 2020, 17:22 »
Цитата: Igors от Май 30, 2020, 16:38
Если нужен только "самый верхний", то может просто qApp->activeWindow() ?
Если бы это работало - я бы тему не поднимал. И это не работает и toplevelwidget. Есть предположение, что можно отследить перемещение виджетов и просто запоминать, какой из них в какой момент стал верхним (или несколько верхних).
Но однозначного решения я не нашёл.
Записан
Digital Art
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...