QTableView中通过模型的列的初始宽度

时间:2014-09-24 07:44:46

标签: qt

我有基于QAbstractTableModel的QTableView。 在QAbstractTableModel中重新实现方法headerData()根据模型设置列名和宽度。但是

switch( role )
{
    ...
    case Qt::SizeHintRole       : return QSize( 500, 0 );
    ...
}

无效。表中的所有列都具有相同的宽度()。我应该怎样做才能正确设置初始列宽。

P.S。:在this问题中建议使用代理来解决同样的问题,但我认为应该使用headerData()。

4 个答案:

答案 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);

enter image description here