PyQt:将图标添加到QListWidget项的右侧

PyQt:将图标添加到QListWidget项的右侧,qt,pyqt,icons,qlistwidget,Qt,Pyqt,Icons,Qlistwidget,在QlistWidget中,当使用listItem.setIcon(qIcon)时,图标会放在列表项的左侧。如何使其显示在右侧,如下图所示 还有一个问题。如何从项目中删除图标?为此,您需要提供自己的项目代理,以按照您的需要绘制项目数据 请参见qabstractemview::setItemDelegate() 您可能可以使用QStyledItemDelegate作为基类,并让它的paint()处理除Qt::DecorationRole(图标)之外的所有方面,然后自己绘制它。这可以通过一个简单的

在QlistWidget中,当使用
listItem.setIcon(qIcon)
时,图标会放在列表项的左侧。如何使其显示在右侧,如下图所示


还有一个问题。如何从项目中删除图标?

为此,您需要提供自己的项目代理,以按照您的需要绘制项目数据

请参见
qabstractemview::setItemDelegate()


您可能可以使用
QStyledItemDelegate
作为基类,并让它的
paint()
处理除
Qt::DecorationRole
(图标)之外的所有方面,然后自己绘制它。

这可以通过一个简单的自定义项委托轻松完成:

class ItemDelegate(QtGui.QStyledItemDelegate):
def油漆(自身、油漆工、选项、索引):
option.decorationPosition=QtGui.QStyleOptionViewItem.Right
超级(ItemDelegate,self).paint(画师、选项、索引)
类主窗口(QtGui.QMainWindow,Ui\U主窗口):
定义初始化(自):
...
self.delegate=ItemDelegate()
self.listWidget.setItemDelegate(self.delegate)
要从项目中删除图标,只需将其设置为null
QIcon

listItem.setIcon(QtGui.QIcon())

我懂了。谢谢你的回答。我以前没有创建过自定义委托,所以我不知道如何在PyQt中实现它,是否有类似的引用我可以看一看?我自己也没有使用PyQt,但我猜您使用标准Python子类化语法,然后用函数签名覆盖paint方法,如
def paint(self、painter、option、index):
我想我找到了一个很好的例子。但问题是我的列表小部件是在Qt Designer中创建的,我不确定如何用代理版本无缝地替换它!您不需要替换视图,只需要创建委托类的对象和对视图对象的调用
setItemDelegate()
。如果您查看链接的示例,那么行
lv=QListView()
基本上就是从设计器文件生成的代码所做的,关于创建和设置代理的行也适用于您,就像一个魔咒一样!谢谢你的详尽回答!