【发布时间】:2013-07-06 07:29:39
【问题描述】:
这是我的软件的打印屏幕:
如您所见,第一个 QTableVIew 标头不会占用 100% 的宽度。其实在size这个字段的右边有一个小的垂直空白。
如何让标题占QTableView 宽度的 100%?
【问题讨论】:
标签: qt qtableview
这是我的软件的打印屏幕:
如您所见,第一个 QTableVIew 标头不会占用 100% 的宽度。其实在size这个字段的右边有一个小的垂直空白。
如何让标题占QTableView 宽度的 100%?
【问题讨论】:
标签: qt qtableview
如果您使用的是 Qt 5,QHeaderView::setResizeMode() 将不再可用。相反,您可以使用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 循环因此简化为一个简单的单行。另请参阅this relevant answer。
Stretch 用于setSectionResizeMode() 后不能调整宽度,可以吗?
使用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.
}
}
【讨论】: