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

相關問題