我希望基于 QAbstractListModel
的 QListView
的高度适合内容,如果项目的数量小于给定的数字 N。如果有更多多于 N 个项目,它应该只显示 N 个项目。我在网上阅读了很多奇怪的提示,但其中大部分看起来都像是 hack。我想这与 sizeHint()
有关,但在模型 View 方法中没有 ItemWidget,我可以在其中覆盖 sizeHint()
。实现此行为的正确方法是什么?
此外,这与父应用程序的大小策略有何关联?这是第二个约束:内容不应尝试使用它们在父小部件中的空间,但父小部件应调整大小以适应 QListView
。
这不是 this question 的拷贝,因为我不能使用 QCompleter
。
最佳答案
sizeHint() 必须在 QListView 中被覆盖(分别是它的子类)。上面提到的特殊行为可以在那里实现。例如像这样:
QSize ProposalListView::sizeHint() const
{
if (model()->rowCount() == 0) return QSize(width(), 0);
int nToShow = _nItemsToShow < model()->rowCount() ? _nItemsToShow : model()->rowCount();
return QSize(width(), nToShow*sizeHintForRow(0));
}
这需要项目委托(delegate)的大小提示是合理的。就我而言:
inline QSize sizeHint ( const QStyleOptionViewItem&, const QModelIndex& ) const override { return QSize(200, 48); }
现在我只需在更改模型后调用 updateGeometry()。
关于c++ - 调整QListView的高度以适应内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613456/