可以通过设置QHeaderView的ResizeMode属性来控制列宽的调整方式,从而实现设置表格列宽为一定比例的效果。
首先,需要将QTableWidget的水平头部视图(horizontalHeader)强制转换为QHeaderView类型,并设置其ResizeMode属性为Stretch。这样,在表格中添加新的列时,所有列会自动按比例分配宽度。
然后,可以使用setColumnWidth()方法来手动设置某些列的宽度。例如,如果要将第1和第2列设置为相同的宽度,并让第3列占据剩余空间,则可以这样:
// 设置第1、2列宽度
tableWidget->setColumnWidth(0, 100);
tableWidget->setColumnWidth(1, 100);
// 获取剩余空间总宽度
int remainingWidth = tableWidget->viewport()->width() - tableWidget->columnWidth(0) - tableWidget->columnWidth(1);
// 设置第3列宽度
tableWidget->horizontalHeader()->setStretchLastSection(true); // 让最后一列占据剩余空间
tableWidget->setColumnWidth(2, remainingWidth);
在上述代码中,我们先手动设置了前两列的宽度,然后获取了剩余空间总宽度,并将最后一列(即第3列)设置为占据剩余空间。这里用到了QHeaderView::setStretchLastSection()方法来确保最后一列始终占据剩余空间。
当添加新的列时,所有列会自动按比例分配宽度,并且第3列仍然会占据剩余空间。
注意:如果想要在设置表格列宽为一定比例的同时,让表格自适应窗口大小,则需要结合使用resizeColumnsToContents()和resizeRowsToContents()方法。例如:
// 设置水平头部视图ResizeMode属性
tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 设置表格列宽为一定比例
tableWidget->setColumnWidth(0, 100);
tableWidget->setColumnWidth(1, 100);
int remainingWidth = tableWidget->viewport()->width() - tableWidget->columnWidth(0) - tableWidget->columnWidth(1);
tableWidget->horizontalHeader()->setStretchLastSection(true);
tableWidget->setColumnWidth(2, remainingWidth);
// 自适应窗口大小
tableWidget->resizeColumnsToContents();
tableWidget->resizeRowsToContents();
这样,在窗口大小发生变化时,表格会自动调整列宽和行高以适应新的窗口大小。