在Python Qt中,我将一个QListWidget信号连接到一个插槽,如下所示:
QtCore.QObject.connect(self.myList, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.ListEventHandler)
我的问题是:QListWidgetItem *
中的尾随星号是做什么的?
答案 0 :(得分:5)
要解释几个要点(我试着避免使用C ++语法):
QObject
继承的类提供内省,经常使用字符串来识别事物。 Python有本机内省,但C ++没有。QtCore.SIGNAL("itemClicked(QListWidgetItem *)")
是指一个名为itemClicked
的Qt信号,其参数是指针到QListWidgetItem
,而不是项目本身。在C ++中,这看起来像:
void itemClicked(QListWidgetItem *item);
返回字符串进行内省,识别信号或广告位,删除void
,;
和变量名称(item
),留下:
itemClicked(QListWidgetItem *)
在QtCore.SIGNAL()
和一对引号中包含以上内容,您有:
QtCore.SIGNAL("itemClicked(QListWidgetItem *)")
什么是指针?
关于这一点有很多SO问题。 Here is one在答案中有许多类比,可以为你简化。
如果这是旧式语法,那么新风格是什么?
感谢Frodon提出这个问题。 PyQt有更多" pythonic"将信号连接到插槽的方法,格式为:
object.signalName.connect(otherObject.slotName)
在这种情况下:
self.myList.itemClicked.connect(self.ListEventHandler)
了解更多in the docs。
答案 1 :(得分:2)
它的C ++语法,用于指示函数itemClicked
作为唯一参数传递指向QListWidgetItem
的指针。
您可以将此视为"通过引用传递"而不是"传递值"。