Python 对齐列'中的pixmap;具有QTreeView和qabstractemodel的s中心

Python 对齐列'中的pixmap;具有QTreeView和qabstractemodel的s中心,python,qt,qtreeview,pyside2,qabstractitemmodel,Python,Qt,Qtreeview,Pyside2,Qabstractitemmodel,如何在QTreeView中使pixmap对齐到其列的中心?我有两列图标向左对齐,但我希望其中一列居中,因此这需要处理单个列,而不是强制整个表对齐 我使用了一个QTreeView,它的模型是qabstractemodel。在一列中,我将其标记为QtCore.Qt.DecorationRole,并在模型的data()方法中返回一个pixmap,以便它沿着该列显示图像 一切都很好,除了图像都是左对齐的,就我而言,我无法使它们水平居中 在data() 有没有其他方法可以做到这一点?如果可能的话,我对代理

如何在
QTreeView
中使pixmap对齐到其列的中心?我有两列图标向左对齐,但我希望其中一列居中,因此这需要处理单个列,而不是强制整个表对齐

我使用了一个
QTreeView
,它的模型是
qabstractemodel
。在一列中,我将其标记为
QtCore.Qt.DecorationRole
,并在模型的
data()
方法中返回一个pixmap,以便它沿着该列显示图像

一切都很好,除了图像都是左对齐的,就我而言,我无法使它们水平居中

data()


有没有其他方法可以做到这一点?如果可能的话,我对代理路线不感兴趣。

一个可能的解决方案是覆盖代理的
initStyleOption()
方法:

从PySide2导入QtCore、QtGui、QtWidgets
类IConCenter委托(QtWidgets.QStyledItemDelegate):
def initStyleOption(self、option、index):
super(IConCenter,self).initStyleOption(选项,索引)
option.decorationAlignment=(
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignCenter
)
option.decorationPosition=qtwidts.QStyleOptionViewItem.Top
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
w=qtwidts.QTreeView()
model=QtGui.QStandardItemModel(w)
w、 setModel(model)
委托=IConCenter委托(w)
w、 setItemDelegateForColumn(1,委托)
图标=[
“SP_TitleBarMinButton”,
“SP_标题栏按钮”,
“SP_TitleBarMaxButton”,
“SP_标题栏关闭按钮”,
“SP_TitleBarNormalButton”,
“SP_TitleBarShadeButton”,
“SP_TitleBarUnshadeButton”,
“SP_TitleBarContextHelpButton”,
“SP_MessageBoxInformation”,
“SP_MessageBoxWarning”,
“SP_MessageBoxCritical”,
“SP_MessageBoxQuestion”,
“SP_桌面图标”,
]
父项=model.invisibleRootItem()
对于图标中的图标名称:
icon=qtwidts.QApplication.style().standardIcon(
getattr(qtwidts.QStyle,图标名称)
)
its=[]
对于范围(3)内的uu:
it=QtGui.QStandardItem()
it.setIcon(图标)
its.append(it)
parent.appendRow(its)
model.appendRow(it)
w、 调整大小(640480)
w、 expandAll()
w、 show()
sys.exit(app.exec_())


如果希望所有列的图标居中对齐,则可以覆盖视图的viewOptions()方法:

classtreeview(qtwidts.QTreeView):
def viewOptions(自):
option=super().viewOptions()
option.decorationAlignment=(
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignCenter
)
option.decorationPosition=qtwidts.QStyleOptionViewItem.Top
返回选项

@eyllansc嘿,我保留
qt
标签可以吗?它有大量的观察者,我不介意这个解决方案是否在Python之外。如果你认为我的版本消除了一些重要的东西,你可以添加它,因为你是OP,每个人都有不同的标准。另一方面,我标记了一个副本,因为QTableWidget中使用的方法与QTreeView中使用的方法相同,因为它基于viewOptions方法中的一个方法,该方法属于基类QabstractItemViews。在下面的链接中,有一个PySide2的示例是可以的,我不想冒险进行编辑战(这里的一些人很容易误解!)重复的问题确实修复了对齐方式,但对于整个表而言,它与列相对。就我而言,我不能使用此解决方案,因为它会在其他列上扭曲图标。1)我在这里已经有很多时间了,所以我已经知道这些战争对我来说是什么:如果OP拒绝我的编辑,那么我将遵循我的路径,如果我的编辑是正确的,另一个用户将有机会再次进行编辑。2) 你所指出的不是很清楚,也许放置一个错误的图像可以帮助解决我所指出的重复问题,也许你在出版物中所指出的可以以不同的方式解释,所以也许我将其标记为符合其中一种解释的重复。太棒了!刚刚用
qabstractemmodel
测试过,效果不错!我必须将我的
QTreeView
作为父级包含在代理的构造函数中,否则它会崩溃,但这可能是因为我没有使用
QStandardItemModel
QStandardItem