2016-09-11 30 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()一起获取该部分的全局水平位置。

相关问题