0

QTableView我需要最后(最右边)列是空的,可扩展但不可移动。目标是表格不会突然结束(因为我对行使用替代颜色)或丑陋地向右扩展。里面有QHeaderView一个setFirstSectionMovable(bool);最后一部分我需要类似的东西,让其余部分可以移动。(换句话说:用一个空的不可移动的列填充表格的其余部分)。任何线索如何实现这一目标?

我确实mousePressEvent()在一个子类中覆盖QHeaderView以跳过最后一部分,但它仍然可以通过将其他列移动到它的位置来移动,我不知道如何防止这种情况发生。

4

1 回答 1

0

起订量:

成为HeaderView的子类QHeaderView并拥有

setSectionsMovable(true);
setStretchLastSection(true);

处理sectionMoved信号:

connect(this, &QHeaderView::sectionMoved, [this](int, int, int newVisual) {                
  if(newVisual == count()-1) { moveSection(newVisual, newVisual-1); }
});

覆盖mousePressEvent

void HeaderView::mousePressEvent(QMouseEvent* event) {    
int logicalIdx = logicalIndexAt(event->pos());       
if(logicalIdx != count()-1) { QHeaderView::mousePressEvent(event); }
}
于 2020-11-09T10:56:23.117 回答