Я создаю макет отслеживания столбца, который наследует от 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, и это не объясняет прокрутку, которая является моей проблемой.
how to get the absolute position of a section header in tableview?