我創建一個列跟蹤佈局,從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?