我创建一个列跟踪布局,从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?