我想继承QTableWidgetItem,以便我的子类可以有一个额外的'id'属性。
不幸的是,我有点困惑,因为PyQt文档here显示了四种不同的 init 方法。
要为我的“QTableWidgetItemWithId”子类创建我自己的 init 方法(它还会传递一个额外的'id'参数),我应该使用* args,** kwargs吗?如果是这样,那么正确的语法是什么?
非常感谢
答案 0 :(得分:2)
我会说这取决于你的品味和你认为可读的东西,以及你想保留你的子类的灵活性。 您可以向构造函数添加任何您想要的内容,只需将QTableWidgetItem的构造函数需要。有很多方法可以做到这一点。我个人尽量避免使用* args和** kwargs。
from PyQt4.QtGui import QTableWidgetItem
class ATableWidgetItem(QTableWidgetItem):
def __init__(self, id, *args, **kwargs):
super(ATableWidgetItem, self).__init__(*args, **kwargs)
self.id = id
a = ATableWidgetItem(0)
b = ATableWidgetItem(0, QTableWidgetItem.UserType)
c = ATableWidgetItem(0, "text", type=QTableWidgetItem.UserType)
class AnotherTableWidgetItem(QTableWidgetItem):
def __init__(self, id):
super(AnotherTableWidgetItem, self).__init__()
self.id = id
d = AnotherTableWidgetItem(0)
class YetAnotherTableWidgetItem(QTableWidgetItem):
def __init__(self, id, text="", type=QTableWidgetItem.Type):
super(YetAnotherTableWidgetItem, self).__init__(text, type)
self.id = id
e = YetAnotherTableWidgetItem(0)
f = YetAnotherTableWidgetItem(0, "Hello")
g = YetAnotherTableWidgetItem(0, "Hello", QTableWidgetItem.UserType)
答案 1 :(得分:1)
我相信您可以为您的小部件项目定义尽可能多的构造函数。覆盖的基本方法是clone。
Qt有一个带有自定义QTableWidgetItem后代的演示项目:Spreadsheet,其中定义了自定义QTableWidgetItem:spreadsheetitem.h
希望这有帮助,尊重