我正在将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 ++尝试过,但问题仍然存在。
答案 0 :(得分:1)
我没有得到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)
# ...