QStyledItemDelegate的sizeHint方法没有为QTableView行调用

时间:2012-03-20 07:00:59

标签: c++ qt qtableview qitemdelegate

我使用QTableView QSqlQueryModel(它从SQLite中获取数据)。

有一个名为MiniItemDelegate的{​​{3}}子类,我将其用作项目的委托。我设置了QStyledItemDelegate这样的方法:

QSize MiniItemDelegate::sizeHint(const QStyleOptionViewItem &option,
                                 const QModelIndex &index) const
{
    // just for testing...breakpoint shows this line never gets called
    return QSize(256,256);  
}

我不确定为什么在运行以下代码时不会调用此方法:

m_pMiniItemDelegate = new MiniItemDelegate(this);
ui->PList_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->PList_tableView->setSelectionMode(QAbstractItemView::SingleSelection);
ui->PList_tableView->setItemDelegate(m_pMiniItemDelegate);
ui->PList_tableView->setAlternatingRowColors(true);
ui->PList_tableView->setModel(ListMiniSqlModel::instance());

这也不起作用:

ui->PList_tableView->resizeColumnsToContents();
ui->PList_tableView->resizeRowsToContents();

这也不是:

QHeaderView* headerView = ui->PList_tableView->horizontalHeader();
headerView->setResizeMode(QHeaderView::ResizeToContents);

3 个答案:

答案 0 :(得分:3)

QStyledItemDelegate :: sizeHint仅在调用QTableView :: resizeRowsToContents,QTableView :: resizeRowToContents,QTableView :: resizeColumnsToContents和QTableView :: resizeColumnToContents时才有用。或使用

QHeaderView* headerView = tableView->horizontalHeader();
headerView->setResizeMode(QHeaderView::ResizeToContents);

答案 1 :(得分:1)

您是否尝试过: setColumnWidth setRowHeight horizo​​ntalHeader() - > setResizeMode(QHeaderView :: Fixed)

答案 2 :(得分:0)

信用到期的信用。) 在@ HostileFork关于Qt Forum discussion的评论中,有评论主题。在该线程中,用户 mikhailt 提供good solution

verticalHeader 具有可以调整的 DefaultSectionSize 属性。垂直标题(表格左侧的标签)是否实际显示无关紧要,仍然会使用大小。

ui->PList_tableView->verticalHeader()->setDefaultSectionSize(34);

这解决了我使用Qt 5.6的问题,并使我无法分别调整每个数据行的高度,或者在桌面上调整大小。

根据我发现它的评论主题的年龄,这也已经在Qt 4中工作了。