c++ - 调整QListView的高度以适应内容

标签 c++ qt qlistview qsizepolicy

我希望基于 QAbstractListModelQListView 的高度适合内容,如果项目的数量小于给定的数字 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/

相关文章:

c++ - 将迭代器的元素传递给函数 : wrong type of pointer

qt - 有人使用 valgrind 和 Qt 吗?

c++ - OpenCV findContours 堆栈溢出

c++ - 运算符的初始化列表和 RHS

c++ - 为什么对象在 std::move 函数之后仍然存在?

python - PyQt5 中的 QListView.indexAt 返回错误索引?

c++ - 为什么我的模型没有出现在 QListView 中?

c++ - 带有使用自定义模型的复选框的qlistview

c++ - 模板和 ODR

c++ - 如何使用旧的变换矩阵和坐标获得变换矩阵?