使用QTreeView在行中进行错误的文本对齐

时间:2013-09-24 15:02:35

标签: python pyqt pyqt4 text-alignment qtreeview

我有QTreeViewPyQt4)使用下面的代码自定义和调整大小的图标,但大小列显示错误的对齐/位置,如此:

enter image description here

        self.ui.treeView.setIconSize(QtCore.QSize(30,30))

        fileSystemModel = QtGui.QFileSystemModel(self.ui.treeView)
        custonIconProvider = CustomIconsProvider()
        fileSystemModel.setIconProvider(custonIconProvider)

        self.ui.treeView.setModel(fileSystemModel)
        self.ui.treeView.setRootIndex(fileSystemModel.setRootPath(forlderPath))

        self.ui.treeView.setColumnWidth(0, 250)
        self.ui.treeView.setColumnWidth(1, 70)
        self.ui.treeView.setColumnWidth(2, 70)

我在http://pyqt.sourceforge.net/Docs/PyQt4/qtreeview.html文档中搜索了可能的修复方法,但找不到任何明显的内容。

2 个答案:

答案 0 :(得分:3)

解决此问题的一种方法是重新实现模型的data() method,以便TextAlignmentRole的值始终包含AlignVCenter标志:

# python3 or sip.setapi('QVariant', 2)

class FileSystemModel(QtGui.QFileSystemModel):
    def data(self, index, role):
        value = super(FileSystemModel, self).data(index, role)
        if role == QtCore.Qt.TextAlignmentRole and value is not None:
            value |= QtCore.Qt.AlignVCenter
        return value

# python2 or sip.setapi('QVariant', 1)

class FileSystemModel(QtGui.QFileSystemModel):
    def data(self, index, role):
        value = super(FileSystemModel, self).data(index, role)
        if role == QtCore.Qt.TextAlignmentRole and value.isValid():
            value = value.toInt()[0] | QtCore.Qt.AlignVCenter
        return value

答案 1 :(得分:0)

view - >模型 - > setData(索引,YOUR_VALUE,Qt :: TextAlignmentRole)