当QFileSystemModel的内容显示在QTableView中时,第一行标题部分中文本的对齐方式是右对齐的,而其他文本是左对齐的,我想知道为什么?
如何使每个标题部分中的文本对齐方式左对齐?
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_()
答案 0 :(得分:1)
我在我自己的代码中使用QFileSystemModel
,并且惊讶地发现你得到了这种奇怪的行为。然后我深入挖掘并看到我实际上已经将QFileSystemModel
子类化并覆盖了headerData
方法。
似乎当role
为Qt.DecorationRole
和section==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)