Получить абсолютную / глобальную позицию раздела заголовка таблицы с учетом горизонтальной прокрутки

Я создаю макет отслеживания столбцов, который наследуется от QHBoxLayout, который выровняет пару правок строк по столбцам таблицы:

введите описание изображения здесь

Для этого я рассчитываю абсолютную позицию экрана каждого размера раздела в ColumnAlignedLayout::setGeometry() используя этот код:

void ColumnAlignedLayout::setGeometry(const QRect &r)
{
QHBoxLayout::setGeometry(r);
int widgetX = parentWidget()->mapToGlobal(QPoint(0, 0)).x();
int headerX = headerView->mapToGlobal(QPoint(0, 0)).x();
int delta = headerX - widgetX;
for (int ii = 0; ii < headerView->count(); ++ii) {
int pos = headerView->sectionPosition(ii);
int size = headerView->sectionSize(ii);

auto item = itemAt(ii);
auto r = item->geometry();
r.setLeft(pos + delta);
r.setWidth(size);
item->setGeometry(r);
}
}

Макет уже работает, за исключением случаев, когда таблица имеет горизонтальную прокрутку.

введите описание изображения здесь

Полный проект находится на https://github.com/sashoalm/ColumnAlignedLayout, и его запуск легко воспроизведет проблему — просто увеличьте столбцы, пока не появится горизонтальная полоса прокрутки, а затем прокрутите, пока первый столбец не будет скрыт.

headerView->mapToGlobal(QPoint(0, 0)).x(); дает одинаковое значение независимо от того, был ли размер таблицы изменен или нет.

Я нашел похожий вопрос, но он касается цели C, и она не учитывает прокрутку, которая является моей проблемой.

как получить абсолютную позицию заголовка раздела в табличном виде?

0

Решение

В конце концов я вошел в источник Qt для их события рисования, предполагая, что им понадобится фактическая позиция для него, и они используют sectionViewportPosition(), который дает фактическую позицию сечения относительно верхнего левого угла QTableWidget / QTableView.

Вы можете использовать это вместе с mapToGlobal() чтобы получить глобальное горизонтальное положение раздела.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]