一、猜想与试验
说明一下,我已经很久没有写qt了,这两天准备写着玩玩,在我写的小demo中呢,有个场景,我需要让表格进行自适应填充满窗口,同时列也可以进行拖拽宽度,那么这个场景呢,我就试着找了下网上的资料(后面我会解释如何在初始化时正确的去处理一些我们想处理并能正确获取值)。
对表格自动填充(列自适应分配列宽)的设置:
// 设置列表自动填充满窗口
ui->information_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
我在mainwindow.cpp构造中进行了处理,效果出来了,确实填充满了
于是我想可拖拽,就在构造中进行了如下设置:
// 设置列表自动填充满窗口
ui->information_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 设置每列都能够拖拽
autoAdjustmentTableWidth();
// 设置每列都能够拖拽,且自适应组件宽度
void MainWindow::autoAdjustmentTableWidth()
{
qDebug()<<"width:"<<width;
int tableCount = ui->information_tableWidget->columnCount();
// 设置每列可拖拽
for(int column = 0;column<tableCount;column++) {
ui->information_tableWidget->horizontalHeader()->setSectionResizeMode(column, QHeaderView::Interactive);
}
}
我看了效果,奇迹发生了,样式全不见了,填充呢?
好家伙,按我想得应该是填充满,并且可拖拽,拖动超出是出现滚动条,这是个神马
于是我又开始找解决办法,找到了这个,说是设置列宽,好吧,我就想到我自己来动态设置列宽,于是我就把上面的autoAdjustmentTableWidth()方法改了一下,下面这样:
void MainWindow::autoAdjustmentTableWidth()
{
int width = ui->information_tableWidget->width();
qDebug()<<"width:"<<width;
int tableCount = ui->information_tableWidget->columnCount();
int columnItenWidth = width / tableCount;
int lastColumnItenWidth = width - (columnItenWidth*(tableCount-1));
// 设置每列可拖拽
for(int column = 0;column<tableCount;column++) {
ui->information_tableWidget->horizontalHeader()->setSectionResizeMode(column, QHeaderView::Interactive);
if(column == tableCount-1) {
ui->information_tableWidget->setColumnWidth(column,lastColumnItenWidth);
} else {
ui->information_tableWidget->setColumnWidth(column,columnItenWidth);
}
}
}
结果,这个是个什么鬼?