Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QFileSystemModel显示在QTableView中时的标题视图_Qt_Pyqt_Pyqt4_Pyside - Fatal编程技术网

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

QFileSystemModel显示在QTableView中时的标题视图,qt,pyqt,pyqt4,pyside,Qt,Pyqt,Pyqt4,Pyside,当QFileSystemModel的内容显示在QTableView中时,第一行标题部分的文本对齐方式是右对齐,而其他部分是左对齐,我想知道为什么? 如何使每个标题部分中的文本左对齐 setDefaultSectionSize()在这里似乎不起作用 我的代码 import sys from PyQt4.QtGui import * from PyQt4.QtCore import * if __name__ == '__main__': app =QApplication

当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_()

我在自己的代码中使用了
QFileSystemModel
,看到您出现这种奇怪的行为,我感到很惊讶。然后我深入研究,发现我实际上已经对
QFileSystemModel
进行了子类化,并重写了
headerData
方法

似乎当
role
Qt.DecorationRole
section==0
时,默认的
headerData
函数返回一个
QImage
,这会把事情搞砸。另外,
setDefaultAlignment
似乎并没有实际设置默认对齐方式

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


我在自己的代码中使用了
QFileSystemModel
,看到您出现这种奇怪的行为,我感到很惊讶。然后我深入研究,发现我实际上已经对
QFileSystemModel
进行了子类化,并重写了
headerData
方法

似乎当
role
Qt.DecorationRole
section==0
时,默认的
headerData
函数返回一个
QImage
,这会把事情搞砸。另外,
setDefaultAlignment
似乎并没有实际设置默认对齐方式

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


当请求Qt::TextAlignmentRole时,您是否可以检查模型从headerData()返回的内容?model.headerData(0,Qt.Vertical,Qt.TextAlignmentRole)返回1.model.headerData(0,Qt.Horizontal,Qt.TextAlignmentRole)返回1。当请求Qt::TextAlignmentRole?model.headerData时,您是否可以检查模型从headerData()返回的内容(0,Qt.Vertical,Qt.TextAlignmentRole)返回1.model.headerData(0,Qt.Horizontal,Qt.TextAlignmentRole)返回1。如果默认headerData将随机图像作为第一个元素返回,则需要报告该错误。
setDefaultAlignment
在视图上调用,而不是在模型上调用,因此模型在那里没有任何荣誉。如果
setDefaultAlignment
与模型没有任何关系,那么为什么要询问f或者检查
TextAlignmentMode
headerData
输出的操作?对我来说,
setDefaultAlignment
似乎对模型或视图都没有影响。我没有检查
setDefaultAlignment
的实现,但我真正改变对齐方式的唯一方法是在
headerData中设置它
@peppe.不是一个bug:更像是一个丑陋的黑客行为。出于不清楚的原因,当前的实现故意在第一部分返回一个空白图像。在tableview中使用模型似乎只是暴露了这个黑客行为。@ardoi.您的解决方案看起来不错,但为了提高兼容性,最好在中返回
e> DecorationRole
因为
QVariant
并不总是可用(例如,默认情况下它不适用于python3)@ardoi:因为我假设
setDefaultAlignment
设置默认对齐方式,即如果模型没有另外指定,视图将使用的对齐方式。如果默认headerData返回随机图像作为第一个元素,则需要报告该错误。
setDefaultAlignment
在视图上调用,而不是在视图上调用模型,因此模型没有什么值得尊敬的。如果
setDefaultAlignment
与模型没有任何关系,那么为什么您要求OP检查
headerData
输出的
TextAlignmentMode
?在我看来,
setDefaultAlignment
对模型或视图都没有影响。我没有检查k
setDefaultAlignment
的实现,但我真正改变对齐方式的唯一方法是在
headerData
@peppe中设置对齐方式。这不是一个bug:更像是一个丑陋的黑客。出于模糊的原因,当前的实现故意在第一部分返回一个空白图像。似乎在tableview中使用模型只是暴露了这个漏洞。@ardoi。您的解决方案看起来不错,但为了提高兼容性,最好为
DecorationRole
返回
None
,因为
QVariant
并不总是可用的(例如,默认情况下它不适用于python3)@ardoi:因为我假设
setDefaultAlignment
设置默认对齐方式,即如果模型没有另外指定,视图将使用的对齐方式。
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)