【问题标题】:Wrong text alignment in row using QTreeView使用 QTreeView 的行中文本对齐错误
【发布时间】:2013-09-29 21:10:15
【问题描述】:

我有一个 QTreeView(带有 PyQt4),使用下面的代码自定义和调整大小的图标,但 Size 列显示错误的对齐/位置,如下所示:

        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 文档以寻找可能的修复方法,但找不到任何明显的东西。

【问题讨论】:

    标签: python pyqt pyqt4 text-alignment qtreeview


    【解决方案1】:

    解决此问题的一种方法是重新实现模型的 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
    

    【讨论】:

    • 嘿,ekhumoro,非常感谢您再次访问这篇文章!这正是我想要的!
    【解决方案2】:

    view -> model -> setData(index, YOUR_VALUE, Qt::TextAlignmentRole)

    【讨论】:

    • 我不懂python,但我指定了应该调用的方法。我认为这很清楚,该怎么做。如果有人投反对票 - 请添加 cmets,为什么。
    • 我没有否决您的答案,是其他人。我理解了你的代码并在 Python 中尝试过,但没有得到想要的效果。
    • 我试过这个代码:fileSystemModel.setData(QtCore.QModelIndex(), QtCore.QVariant(QtCore.Qt.AlignLeft), QtCore.Qt.TextAlignmentRole)
    • 您传递的QModelIndex 无效。您应该为每个单元格路径有效索引。或者最好将您的模型子类化并重新实现data 方法,这将始终为“size”列返回可取的值。
    • 也许我必须为每个项目循环调用它,就像这个链接建议的那样:bugreports.qt-project.org/browse/QTBUG-595
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2023-04-06
    • 2013-12-10
    • 1970-01-01
    • 2015-03-25
    • 2014-08-10
    相关资源
    最近更新 更多