QStyledItemDelegate's sizeHint 方法未为 QTableView 行调用

QStyledItemDelegate's sizeHint method not called for a QTableView row

本文关键字:QTableView 调用 方法 sizeHint QStyledItemDelegate      更新时间:2023-10-16

我有一个使用QSqlQueryModel的QTableView(它从SQLite获取数据)。

有一个名为MiniItemDelegate的QStyledItemDelegate子类,我将其用作项的委托。我设置了一个sizeHint()方法,如下所示:

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

QStyledItemDelegate::sizeHint仅在调用QTableView::resizeRowsToContents、QTableView:resizeRowToContents、QableView::resizeColumnsToContent和QTableView:resizeColumnToContents时有用。或使用

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

您是否尝试过:setColumnWidthsetRowHeighthorizontalHeader()->setResizeMode(QHeaderView::Fixed)

到期信贷。)在@HostileFork关于Qt论坛讨论的评论中,有一条评论。在该线程中,用户mikhailt提供了一个很好的解决方案。

verticalHeader具有可调整的DefaultSectionSize属性。垂直标题(表左侧的标签)是否实际显示并不重要,大小仍将使用。

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

这正好解决了我在Qt 5.6中的问题,使我不用单独调整每个数据行的高度,也不用在表上调整大小。

根据我发现的评论线程的年龄,这也已经在Qt4中运行了。