Как я могу получить местоположение QDockWidget в его текущей области дока? Например, если у меня есть область дока, разделенная пополам с двумя виджетами, как я могу запросить фреймворк, чтобы узнать, какой из них находится сверху, а какой снизу? Конечно, пользователь может динамически перетаскивать QDockWidgets.
Как я могу получить местоположение QDockWidget в его текущей области дока
Ответы (1)
Вы можете определить, какой док находится выше другого, проверив значение обеих их геометрий.
если у вас два дока,
QDockWidget dock1;
QDockWidget dock2;
тогда тот, что сверху, будет иметь меньшее значение y()
(поскольку верхний левый угол экрана равен (0,0), а значение y увеличивается по мере продвижения вниз)
if(dock1.geometry().y() < dock2.geometry().y())
{
qDebug() << "Dock 1 is above Dock 2";
}
Слева и справа можно рассчитать, используя значение x()
. Если геометрии эквивалентны, доки располагаются на вкладках, а тот, что сверху, можно определить по значению isVisible()
.
Если вы хотите пересчитать, какой док находится сверху по отношению к пользовательскому вводу, я бы рекомендовал подключиться к сигналу QDockWidget::dockLocationChanged
, так как он будет излучаться всякий раз, когда док меняет местоположение дока или перемещается в пределах своего текущего местоположения, что должно охватывать все необходимые случаи.