QTableView 拉伸 Headers 但保持交互
QTableView Stretch Headers but keep Interactive
我正在努力尝试容纳我的 QTableView 以方便用户使用。
这个功能是我真正需要的:
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
问题在于 headers 不再是用户可调的,完全冻结了。
我知道我们也有这个功能可以让用户调整Headers,但是在使用它之后,headers又回来了,就好像我之前没有使用过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
我正在努力尝试容纳我的 QTableView 以方便用户使用。
这个功能是我真正需要的:
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
问题在于 headers 不再是用户可调的,完全冻结了。
我知道我们也有这个功能可以让用户调整Headers,但是在使用它之后,headers又回来了,就好像我之前没有使用过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