我有基于QAbstractTableModel的QTableView。 在QAbstractTableModel中重新实现方法headerData()根据模型设置列名和宽度。但是
switch( role )
{
...
case Qt::SizeHintRole : return QSize( 500, 0 );
...
}
无效。表中的所有列都具有相同的宽度()。我应该怎样做才能正确设置初始列宽。
P.S。:在this问题中建议使用代理来解决同样的问题,但我认为应该使用headerData()。
答案 0 :(得分:6)
QAbstractItemModel
假设可以在Qt::SizeHintRole
方法中使用headerData
来返回标题部分的假定大小。 Hovewer,这些信息的使用取决于某些视图实现。
QHeaderView
使用Qt::SizeHintRole
计算其建议宽度(如果它是水平的)和高度(如果它是垂直的)。
QTableView
订阅sectionHandleDoubleClicked
的信号QHeaderView
,并根据单元格内容大小和标题部分宽度调整相应列的大小。如果处理此角色,则标题部分的宽度是headerData
返回Qt::SizeHintRole
的宽度,否则根据标题部分文本(内容)计算。
如果您需要根据Qt::SizeHintRole
初始化列宽,则需要:
QTableView
setModel
并使用方法Qt::SizeHintRole
根据QTableView::setColumnWidth
使用和设置列的初始宽度。答案 1 :(得分:2)
您有查看问题,而且您正在寻找程序的模型部分。
QTableView类有简单的方法:
void QTableView::setColumnWidth(int column, int width)
和
void QTableView::setRowHeight(int row, int height)
答案 2 :(得分:0)
为水平和/或垂直标题添加一行或两行:
document.write
答案 3 :(得分:0)
填充模型后,可以在列上设置单个策略。这对我有帮助,我的桌子上有4列,我希望前两列填充视图,而后两列则要适合相当狭窄的内容,同时仍要完全填充视图。
this->ui->tableView->setModel(model);
ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
ui->tableView->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
ui->tableView->horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents);