QFileSystemModel显示在QTableView中时的标题视图

时间:2013-11-15 14:11:58

标签: qt pyqt pyqt4 pyside

当QFileSystemModel的内容显示在QTableView中时,第一行标题部分中文本的对齐方式是右对齐的,而其他文本是左对齐的,我想知道为什么? enter image description here

如何使每个标题部分中的文本对齐方式左对齐?

setDefaultSectionSize()似乎在这里不起作用

我的代码

import sys   
from PyQt4.QtGui import *
from PyQt4.QtCore import *

if __name__ == '__main__':   

    app =QApplication(sys.argv)      
    ui =QMainWindow()   

    model= QFileSystemModel ()      
    model.setRootPath(QDir.currentPath())  

    model.sort(3)

    table = QTableView()
    #print(table.verticalHeader().defaultAlignment()) #
    table.verticalHeader().setDefaultAlignment(Qt.AlignRight)

    table.setModel(model);   
    table.setRootIndex(model.index(QDir.currentPath())) # 
    ui.setCentralWidget(table)
    ui.resize(800, 600)
    ui.show()      
    app.exec_()

1 个答案:

答案 0 :(得分:1)

我在我自己的代码中使用QFileSystemModel,并且惊讶地发现你得到了这种奇怪的行为。然后我深入挖掘并看到我实际上已经将QFileSystemModel子类化并覆盖了headerData方法。

似乎当roleQt.DecorationRolesection==0时,默认的headerData函数会返回QImage,这会让事情变得混乱。此外,setDefaultAlignment似乎并未实际设置默认对齐方式。

如果您使用下面给出的课程,问题就会消失。您可以在构造函数中指定MyFileSystemModel的对齐方式(例如model= MyFileSystemModel(h_align = Qt.AlignRight)

class MyFileSystemModel(QFileSystemModel):
    def __init__(self, h_align = Qt.AlignLeft, v_align = Qt.AlignLeft, parent = None):
        super(MyFileSystemModel, self).__init__(parent)
        self.alignments = {Qt.Horizontal:h_align, Qt.Vertical:v_align}

    def headerData(self, section, orientation, role):
        if role==Qt.TextAlignmentRole:
            return self.alignments[orientation]
        elif role == Qt.DecorationRole:
            return None
        else:
            return QFileSystemModel.headerData(self, section, orientation, role)