问题:
为什么这个答案的 Python 等效项
class CustomDelegate(QtGui.QStyledItemDelegate):
def paint(self, painter, option, index):
opt = QtGui.QStyleOptionViewItem(option)
self.initStyleOption(opt, index)
opt.text = "Test Text"
QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_ItemViewItem, opt, painter)
不要在我的列表视图中绘制任何内容,而我可以通过将QStyleOption
包括必要成员和text
-member 设置为所需文本的权利传递给任意标签来绘制各种其他小部件,如下所示:
class CustomDelegate(QtGui.QStyledItemDelegate):
def paint(self, painter, option, index):
opt = QtGui.QStyleOptionButton()
opt.rect = option.rect
opt.text = "Test Text"
QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_PushButton, opt, painter)
问题背景:
在 PySide 中,我有一个QFileSystemModel
应用于 aQListView
并希望显示没有文件扩展名的文件名。
我的计划是应用 a CustomDelegate
which 继承QStyledItemDelegate
并更改-functionQStyleOptionViewItem
内部的a 的文本成员,paint()
正如您在上面的第一个代码示例中看到的那样。唯一的区别:"Test Text"
被替换为os.path.splitext(index.data())[0]
.
虽然项目被插入到列表视图中,(我可以通过出现的滚动条和单击列表中的任意位置并打印活动项目来判断)项目根本没有绘制并且保持不可见。
如果我不尝试更改任何内容并传递原始option
参数,也会发生同样的情况:
class CustomDelegate(QtGui.QStyledItemDelegate):
def paint(self, painter, option, index):
QtGui.QApplication.style().drawControl(QtGui.QStyle.CE_ItemViewItem, option, painter)
更多信息:
如果我只是调用超paint()
函数,项目显示正常:
class CustomDelegate(QtGui.QStyledItemDelegate):
def paint(self, painter, option, index):
QtGui.QStyledItemDelegate.paint(self, painter, option, index)
这给了我将自己的想法传递opt
给超级的想法paint()
:
class CustomDelegate(QtGui.QStyledItemDelegate):
def paint(self, painter, option, index):
opt = QtGui.QStyleOptionViewItem(option)
self.initStyleOption(opt, index)
opt.text = os.path.splitext(index.data())[0]
print(opt.text)
QtGui.QStyledItemDelegate.paint(self, painter, opt, index)
但这也会显示带有扩展名的文件名......尽管将名称放在没有扩展print()
名的控制台上。
opt.text
奇怪的是,在将其设置为任何内容之前尝试打印让我:
AttributeError: 'PySide.QtGui.QStyleOptionViewItem' object has no attribute 'text'
最后:省略initStyleOption()
-call 似乎对任何配置都没有任何影响。