Je crée une mise en page de suivi de la colonne qui hérite de QHBoxLayout, qui alignera deux lignes modifications aux colonnes de table:Obtenez position absolue/globale de la section d'en-tête de la table tout en tenant compte de défilement horizontal
Pour ce faire, je calcule la position de l'écran absolu de chaque taille de section ColumnAlignedLayout::setGeometry()
en utilisant ce code:
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);
}
}
la mise en page fonctionne déjà, sauf lorsque la table a un défilement horizontal.
Le projet complet est à https://github.com/sashoalm/ColumnAlignedLayout, et exécuter reproduira le problème facilement - il suffit d'élargir les colonnes jusqu'à ce que la barre de défilement horizontale apparaît, puis faites défiler jusqu'à ce que la première colonne est cachée.
headerView->mapToGlobal(QPoint(0, 0)).x();
donne la même valeur si la table a été redimensionnée ou non.
J'ai trouvé une question similaire mais c'est pour l'objectif C, et cela ne tient pas compte du défilement qui est mon problème.
how to get the absolute position of a section header in tableview?