信号和槽连接中的星号是什么?
What is the asterisk for in signal and slot connections?
在 Python Qt 中,我将 QListWidget 信号连接到插槽,如下所示:
QtCore.QObject.connect(self.myList, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.ListEventHandler)
我的问题是:QListWidgetItem *
中的尾随星号有什么作用?
这是 C++ 语法,用于指示函数 itemClicked
传递一个指向 QListWidgetItem
的指针作为其唯一参数。
您可以将其视为 "pass by reference",而不是 "pass by value"。
要解释的几个要点(我将尽量避免使用 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 *)")
什么是指针?
关于这个有很多问题。 Here is one 答案中有许多类比,为您简化事情。
如果这是旧式语法,那么新式是什么?
感谢 Frodon 提出这个问题。 PyQt有一个更"pythonic"的连接信号槽的方法,格式为:
object.signalName.connect(otherObject.slotName)
在这种情况下:
self.myList.itemClicked.connect(self.ListEventHandler)
阅读更多in the docs。
在 Python Qt 中,我将 QListWidget 信号连接到插槽,如下所示:
QtCore.QObject.connect(self.myList, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.ListEventHandler)
我的问题是:QListWidgetItem *
中的尾随星号有什么作用?
这是 C++ 语法,用于指示函数 itemClicked
传递一个指向 QListWidgetItem
的指针作为其唯一参数。
您可以将其视为 "pass by reference",而不是 "pass by value"。
要解释的几个要点(我将尽量避免使用 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 *)")
什么是指针?
关于这个有很多问题。 Here is one 答案中有许多类比,为您简化事情。
如果这是旧式语法,那么新式是什么?
感谢 Frodon 提出这个问题。 PyQt有一个更"pythonic"的连接信号槽的方法,格式为:
object.signalName.connect(otherObject.slotName)
在这种情况下:
self.myList.itemClicked.connect(self.ListEventHandler)
阅读更多in the docs。