这是我的软件截图:
正如您所见,第一个 QTableView
的表头没有占满 100% 的宽度。实际上,在字段 size
右侧有一小段垂直的白色空间。
我应该如何使表头占据 QTableView
宽度的 100%?
这是我的软件截图:
正如您所见,第一个 QTableView
的表头没有占满 100% 的宽度。实际上,在字段 size
右侧有一小段垂直的白色空间。
我应该如何使表头占据 QTableView
宽度的 100%?
QHeaderView :: setResizeMode()
不再可用。相反,您可以使用{{link1:QHeaderView :: setSectionResizeMode()
}}:ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
或者对每一列都进行调用:
for (int c = 0; c < ui->tableView->horizontalHeader()->count(); ++c)
{
ui->tableView->horizontalHeader()->setSectionResizeMode(
c, QHeaderView::Stretch);
}
QHeaderView::setSectionResizeMode()
。为了自动将传递的伸展应用于所有列,只需调用该方法一次而不是迭代地传递显式列索引:例如,ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
。因此上面的for
循环可以简化为一个简单的一行代码。请参见这个相关答案。 - Cecil CurrysetSectionResizeMode()
的Stretch
后,您不能调整宽度,对吗? - Jason使用 view->horizontalHeader()->setStretchLastSection(true)
来使最后一列扩展到剩余空间。
此外,使用 view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)
来使所有列的宽度相同。
只使用以下内容即可正常工作:
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
我正在使用Qt 5.2!
我在表格的所有单元格之间分配列宽度时遇到了困难。 在我的情况下,在模型的headerData函数中,我执行了以下操作(需要在某个地方调用resizeColumnsToContents()):
QVariant headerData(int section, Qt::Orientation orientation, int role) const override {
if (orientation == Qt::Vertical) {
return QVariant();
}
if (role == Qt::SizeHintRole) {
auto* p = qobject_cast<QTableView*>(QObject::parent());
if (p == nullptr) return QVariant();
// Parent total width.
const int w = p->viewport()->size().width() -
p->verticalScrollBar()->sizeHint().width();
QSize qs;
// Default height.
qs.setHeight(p->verticalHeader()->defaultSectionSize());
// Width per column.
switch (section) {
case 0:
qs.setWidth(w * 0.45);
return QVariant(qs);
case 1:
qs.setWidth(w * 0.45);
return QVariant(qs);
// ... others
default: ;
}
return QVariant();
}
if (role == Qt::DisplayRole) {
// header titles.
}
}