QTableView 拉伸标头,但保持交互性



我正在努力适应我的QTableView,以便于用户使用。

这个函数在我真正需要的时候工作:

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

这样做的问题是标题不再由用户调整,完全冻结。

我知道我们也有这个功能,允许用户调整标题,但是使用它后,标题会返回,就好像我之前没有使用过QHeaderView::Stretch一样:

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);

我真的在许多网站上寻找过这个,但没有运气找到适合我水平的可理解答案。

谢谢!

我找到了方法,首先我需要设置每列的宽度以适应 QTableView 大小,然后拉伸最后一部分,所以现在每列都可以调整大小。

for(int c = 0;c<=4;c++){
ui->tableView->horizontalHeader()->resizeSection(c, 150);
}
ui->tableView->horizontalHeader()->setStretchLastSection(true);

谢谢

像这样使用EventFilter并将其安装在tablewidget上,最后一列的默认大小必须知道(self.last_baseColumnSize((:

def eventFilter(self,obj,event):
if  obj is self.ui.tableWidget and event.type()==QEvent.Type.Resize:
hub=self.ui.tableWidget.horizontalHeader()
fixedSizes=self.ui.tableWidget.verticalHeader().width()
fixedSizes+=self.ui.tableWidget.columnCount()+1 #Borders
if (self.ui.tableWidget.verticalScrollBar().isVisible()):
fixedSizes += self.ui.tableWidget.verticalScrollBar().width()
tmp=[x for x in range(self.ui.tableWidget.columnCount()) if hub.resizeMode(x) != QHeaderView.Fixed]

for i in range (self.ui.tableWidget.columnCount()-1):
if hub.resizeMode(i) == QHeaderView.Fixed:
fixedSizes+=self.ui.tableWidget.columnWidth(i)
if hub.resizeMode(self.ui.tableWidget.columnCount()-1) == QHeaderView.Fixed:
fixedSizes+=self.last_baseColumnSize

newsize=max(20,(event.size().width()-fixedSizes)/len(tmp))
for i in tmp:
self.ui.tableWidget.setColumnWidth(i,newsize)
return False

最新更新