1.设置表所有列宽度平均
可以使用setSectionResizeMode设置 QTableWidget
的列宽度按照平均分配:
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
该模式会让所有的列宽度都按照平均分配来调整,使得它们能够占满整个表格的宽度,但有时会存在出现进度条的情况,观感不是特别好。
2.设置表所有列为固定值
使用QHeaderView::Fixed设置所有的列的宽度都按照固定值来调整:
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);
该模式使所有的列的宽度都固定下来,不会再自动调整了。
3.使用QHeaderView::Fixed模式计算并设置平均宽度(推荐)
setSectionResizeMode可以对指定行设置按内容自动分配宽度或固定值:
tableWidget->horizontalHeader()->setSectionResizeMode(column, QHeaderView::Stretch);
或
tableWidget->horizontalHeader()->setSectionResizeMode(column, QHeaderView::Fixed);
其中 column
为列号。
因为第一个方法直接设置会导致观感不好,内容没有超出表格,却出现了横向滚动条,所以采取以下方法:
//如果列数大于6行,则不平均列宽,否则可能存在横向滚动条问题,查看不方便
if (tableWidget->columnCount() < 6 && tableWidget->columnCount() > 0)
{
//根据列数,平均每一列宽度
int nTableWidth = tableWidget->viewport()->size().width();
//计算每一列平均宽度
int nAvrageWidth = nTableWidth / tableWidget->columnCount();
for (int i = 0; i < tableWidget->columnCount(); i++)
{
//使用QHeaderView::Stretch模式,会出现滚动条,效果不如Fixed
tableWidget->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Fixed);
tableWidget->setColumnWidth(i, nAvrageWidth);
}
}
这样大于6列的列表就会正常按照内容显示,也不会出现横向滚动条的问题;小于6列的列表,如只有2列的列表,则每一列宽度一致,不会出现第一列窄,第二列过宽的情况。