2016-09-11 6 views
0

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

enter image description here

Чтобы сделать это, я вычислить абсолютную позицию на экране каждого размера раздела в 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); 
    } 
} 

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

enter image description here

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

headerView->mapToGlobal(QPoint(0, 0)).x(); дает то же значение, изменилась ли таблица или нет.

Я нашел аналогичный вопрос, но он предназначен для объектива C, и это не объясняет прокрутку, которая является моей проблемой.

how to get the absolute position of a section header in tableview?

ответ

0

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

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