setGridSize(...) 和文本省略

setGridSize(...) and text eliding

我正在使用 QListView 和 QFileSystemModel 制作文件管理器。我正在使用 QListView::ListMode。我面临的问题是尽管设置了网格大小,但文本没有被删除。这是我正在使用的代码。

import sys, os

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

app = QApplication( sys.argv )

fsm = QFileSystemModel()
lv = QListView()
lv.setViewMode( QListView.ListMode )

lv.setResizeMode( QListView.Adjust );
lv.setMovement( QListView.Static );
lv.setSelectionMode( QListView.ExtendedSelection );
lv.setWrapping( True );
lv.setFlow( QListView.LeftToRight );
lv.setTextElideMode( Qt.ElideRight );
lv.setUniformItemSizes( True );

lv.setIconSize( QSize( 48, 48 ) )
lv.setGridSize( QSize( 200, 56 ) )

lv.setModel( fsm )
lv.setRootIndex( fsm.setRootPath( "/path/to/my/folder/" ) )

lv.show()

app.exec_()

我得到的是这个垃圾:

我不知道为什么会这样?如果我没有设置网格大小,那么图标和文本就会正确呈现。这是 Qt 的错误吗?

我正在使用 Debian Sid,Qt5 5.11.3+dfsg1-1,Python3/PyQt5:3.7.3-1/5.11.3+dfsg-1+b3 我什至用 Qt5/C++ 尝试过这个问题,即使在那里也出现了问题。

我不明白 OP 在图像中显示的内容,但我得到以下信息:

这表明 gridSize 不会改变项目的大小,而是改变它们之间的分隔,如标尺所示。

要更改项目的宽度,我已经实现了委托:

# ...
class StyledItemDelegate(QStyledItemDelegate):
    def sizeHint(self, option, index):
        s = super().sizeHint(option, index)
        s.setWidth(200)
        return s

# ...
lv = QListView()
delegate = StyledItemDelegate(lv)
lv.setItemDelegate(delegate)
# ...