Название: QDockWidget определение верхнего Отправлено: tux от Май 19, 2020, 23:37 Доброго времени суток!
Существует QMainWindow, в котором есть несколько QDockWidget. Я их могу "собрать" в один, путём перетаскивания друг на друга. Получается что-то подобное QTabWidget. Понятно, что в разные моменты времени каждый из этих QDockWidget может стать "верхним" (допустим, кликом на него). А может и несколько (если я мышкой их "растащу" по QMainWindow) Вопрос: как программно можно определить какой из этих виджетов "верхний"? Или несколько из них. Название: Re: QDockWidget определение верхнего Отправлено: navrocky от Май 29, 2020, 18:50 Думаю надо смотреть в сторону QEvent::ShowEvent. Ловить это сообщение в твоем QWidget, который вставлен в док
Название: Re: QDockWidget определение верхнего Отправлено: Igors от Май 29, 2020, 19:10 Думаю надо смотреть в сторону QEvent::ShowEvent. Ловить это сообщение в твоем QWidget, который вставлен в док Не понял задумку, ну вот юзверь тыкнул мышей в один из виждетов и тот стал "верхним", но никаких ShowEvent не получим.Неск лет назад была подобная задача и я не нашел ничего лучшего чем нырнуть в нативняк (там сканировать окна в Z-order) Название: Re: QDockWidget определение верхнего Отправлено: tux от Май 30, 2020, 01:08 С Z-ордером тоже не всё так однозначно. Хотя решение должно быть...
Название: Re: QDockWidget определение верхнего Отправлено: Пантер от Май 30, 2020, 15:10 Скорее тут надо смотреть в сторону paintEvent, он не вызывается для перекрытых виджетов...
Название: Re: QDockWidget определение верхнего Отправлено: Igors от Май 30, 2020, 15:19 Скорее тут надо смотреть в сторону paintEvent, он не вызывается для перекрытых виджетов... По крайней мере в общем случае (DoubleBuffering) вызывается. Хотя это не так уж важно. Напр есть 3 окна, они как-то перекрываются, все получают paintEvent. И.. что с того?Хотя решение должно быть... Откуда такая уверенность? :)Название: Re: QDockWidget определение верхнего Отправлено: tux от Май 30, 2020, 15:46 Откуда такая уверенность? :) Сестра Надежда ещё не умерла. :) Просто, если что-то можно сложить в стопку, то должно же как то отличаться верхнее, от не верхнего.Я сомневаюсь, что я первый обратил на это внимание. Складывание доков в стопку вроде было еще в 4-ке... P.S. А вот насчёт paintEvent надо проверить. Даже при перекрываемых окнах, у полностью открытого верхнего дока область отрисовки будет либо равной этому доку либо наибольшей у нескольких. Название: Re: QDockWidget определение верхнего Отправлено: Igors от Май 30, 2020, 16:38 P.S. А вот насчёт paintEvent надо проверить. Даже при перекрываемых окнах, у полностью открытого верхнего дока область отрисовки будет либо равной этому доку либо наибольшей у нескольких. Не стоит надеяться что, мол, рисование (области) не вызывается "для перекрытого другими", это давно уже не так. Qt кеширует рисование, напр если перекрытие изменилось - событие перерисовки не придет, будет использован кеш. Если нужен только "самый верхний", то может просто qApp->activeWindow() ? Название: Re: QDockWidget определение верхнего Отправлено: tux от Май 30, 2020, 17:22 Если нужен только "самый верхний", то может просто qApp->activeWindow() ? Если бы это работало - я бы тему не поднимал. И это не работает и toplevelwidget. Есть предположение, что можно отследить перемещение виджетов и просто запоминать, какой из них в какой момент стал верхним (или несколько верхних). Но однозначного решения я не нашёл. |