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

2024-04-25 10:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我的问题是:QListWidgetItem *中的尾随星号有什么作用?你知道吗


Tags: selfsignal信号connect星号qt插槽mylist
2条回答

几个解释要点(我将尽量避免C++语法):

  • pyqt是一个用QC++编写的Qt周围的Python包装器。你知道吗
  • 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 *)")

什么是指针?
关于这一点有很多疑问。Here is one在答案中用一些类比来为你简化事情。你知道吗

如果这是旧式语法,那么新的样式是什么?
多谢弗罗登提起这事。PyQt有一种更“pythonic”的方法将信号连接到插槽,格式如下:

object.signalName.connect(otherObject.slotName)

在这种情况下:

self.myList.itemClicked.connect(self.ListEventHandler)

阅读更多in the docs。你知道吗

它是C++语法,用于指示函数^ {< CD1>}传递给一个^ ^ {CD2>}的指针作为唯一的参数。你知道吗

您可以将其视为“按引用传递”,而不是“按值传递”。你知道吗

相关问题 更多 >