Trudno mi było rozdzielać szerokości kolumn między wszystkie komórki tabeli. W moim przypadku, w zależności headerData modelu, zrobiłem następujące (wymaga wzywającą resizeColumnsToContents() gdzieś):
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.
}
}
możliwy duplikat [QStandardItemModel wewnątrz Qtableview] (http://stackoverflow.com/questions/16931569/qstandarditemmodel-inside-qtableview) –