QListView 高度根据内容

Posted

技术标签:

【中文标题】QListView 高度根据内容【英文标题】:QListView height according to contents 【发布时间】:2011-04-19 19:37:08 【问题描述】:

我有一个带有字符串列表的 QListView。

基本上,我将它用作 QLineEdit 的弹出窗口,用于自动完成过程。 我不希望 QListView 显示空行,只显示其中包含字符串的行。 看到这个:

我希望它自动调整大小,以便在最后一个条目之后不会有这些空白行。

谢谢

【问题讨论】:

你看过 QCompleter 吗?那应该做你想做的。 我不是要自动完成,而是要避免出现这些空白行。 【参考方案1】:

您可以尝试这样做:重新实现QListView::rowsInserted() 方法类。假设您从 QListView 继承了 MyListView。所以代码可以是这样的:

void MyListView::rowsInserted ( const QModelIndex & parent, int start, int end )

    QListView::rowsInserted(parent, start, end);
    int rc = model()->rowCount();

    // use this all the rows have the same height. otherwise
    // you will need to iterate and sum all row heights
    resize(width(), rc ? rc*sizeHintForRow(0): height()); 

但为了更简单,我建议您使用QCompleter 类with QLineEdit。它已经为您的需要而设计,您无需花时间尝试使其发挥作用。

【讨论】:

好吧,我使用了'resize(width(), rc ? rc*sizeHintForRow(0): height());'在paintEvent 方法中,似乎它成功了。

以上是关于QListView 高度根据内容的主要内容,如果未能解决你的问题,请参考以下文章

QListView 更新 - 不触发更新

如何在 QListView 中修改 drop 事件

PyQt5允许在编辑时选择QListView项

QListView 拒绝显示子类化的 QAbstractListModel

QListView selectionModel 不发送 selectionChanged 信号

Qt - 如何将 QListView 项目转移到另一个 QListView?