信号和插槽连接的星号是什么?

时间:2016-07-19 11:13:55

标签: python qt pyqt signals-slots

在Python Qt中,我将一个QListWidget信号连接到一个插槽,如下所示:

QtCore.QObject.connect(self.myList, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.ListEventHandler)

我的问题是:QListWidgetItem *中的尾随星号是做什么的?

2 个答案:

答案 0 :(得分:5)

要解释几个要点(我试着避免使用C ++语法):

  • PyQt是Qt的Python包装器,用C ++编写。
  • Qt为从QObject继承的类提供内省,经常使用字符串来识别事物。 Python有本机内省,但C ++没有。
  • 您使用的语法称为"Old-Style Signals and Slots",它使用C ++函数签名。
  • C ++比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的指针。

您可以将此视为"通过引用传递"而不是"传递值"。

相关问题