Как я могу получить местоположение QDockWidget в его текущей области дока

Как я могу получить местоположение QDockWidget в его текущей области дока? Например, если у меня есть область дока, разделенная пополам с двумя виджетами, как я могу запросить фреймворк, чтобы узнать, какой из них находится сверху, а какой снизу? Конечно, пользователь может динамически перетаскивать QDockWidgets.


person It's Your App LLC    schedule 15.04.2016    source источник


Ответы (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, так как он будет излучаться всякий раз, когда док меняет местоположение дока или перемещается в пределах своего текущего местоположения, что должно охватывать все необходимые случаи.

person Nicolas Holthaus    schedule 15.04.2016