2012-03-20 871 views
3

我有QTableView使用QSqlQueryModel(它从SQLite中提取数据)。QStyledItemDelegate的sizeHint方法不用于QTableView行

有一个叫做MiniItemDelegateQStyledItemDelegate子类,我用它作为物品的代表。我成立了一个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); 
+1

QTreeView是否像您期望的那样工作,而且这只是QTableView的一个问题? (我认为你已经发现这个线程:http://www.qtforum.org/article/13421/qtableview-how-to-make-rows-size-smaller.html) – HostileFork 2012-03-20 08:16:15

+0

是的,我看到它,也许我需要设置Qt :: SizeHintRole 但事实上im子类化QStyledItemDelegate和没有数据() 方法继承那里 – user63898 2012-03-20 09:14:03

回答

3

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

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

有没有关于这个地方的任何好的文档或信息? – neuronet 2015-10-16 12:35:13

1

你试过:setColumnWidthsetRowHeighthorizo​​ntalHeader() - > setResizeMode(QHeaderView ::固定)

+0

我怎么能?我是否需要设置每一行的大小?其很多 mybe im面临这个错误? https://bugreports.qt-project.org/browse/QTBUG-20298?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel – user63898 2012-03-26 06:26:39

0

信贷,信贷到期。) 在大约Qt Forum discussion @HostileFork的评论,有评论线程。在该线程内,用户mikhailt提供good solution

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

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

这正好解决了我的问题,使用Qt 5.6,并分别从调整每个数据行的高度,或者造成一个表上的调整大小救了我。

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

相关问题