4

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

有一个称为QStyledItemDelegateMiniItemDelegate的子类,我将其用作项目的委托。我设置了这样的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);
4

3 回答 3

3

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

QHeaderView* headerView = tableView->horizontalHeader();
headerView->setResizeMode(QHeaderView::ResizeToContents);
于 2013-05-29T15:01:31.680 回答
1

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

于 2012-03-21T11:24:40.637 回答
1

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

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

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

这刚刚解决了我使用 Qt 5.6 的问题,并且使我免于单独调整每个数据行的高度,或者导致表格的大小调整。

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

于 2016-06-27T11:25:02.963 回答