在Python Qt的,我是一個QListWidget信號連接到插槽中,這樣的:信號和插槽連接的星號是什麼?
QtCore.QObject.connect(self.myList, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.ListEventHandler)
我的問題是:是什麼在QListWidgetItem *
尾隨星號呢?
在Python Qt的,我是一個QListWidget信號連接到插槽中,這樣的:信號和插槽連接的星號是什麼?
QtCore.QObject.connect(self.myList, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.ListEventHandler)
我的問題是:是什麼在QListWidgetItem *
尾隨星號呢?
一對夫婦的要點講解(我會盡量避免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的具有信號連接到狹槽,在格式的更 「Python化」 的方法:
object.signalName.connect(otherObject.slotName)
在這種情況下:
self.myList.itemClicked.connect(self.ListEventHandler)
更多in the docs。
它是C++語法,用於指示函數itemClicked
傳遞指向作爲其唯一參數的QListWidgetItem
的指針。
您可以將此視爲「通過引用傳遞」,而不是「按值傳遞」。
感謝您的回答,James,但我使用Python,而不是C++。 – PProteus
當然,但PyQt信號的簽名是用C++語法定義的,除非我完全錯誤。 [This](http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html)當然表明情況是這樣的。 –
謝謝,喬恩!這是一個非常明確的解釋。你已經爲我解開了一些謎團。 – PProteus
@PProteus對於curiosoty,這裏是相同的代碼行,但是在新式語法中:'self.myList.itemClicked.connect(self.ListEventHandler)' – Frodon
舊式語法已過時,不再是在pyqt5中受支持。你不應該在新的pyqt代碼中使用它 - 它只在pyqt4中支持向後兼容。 – ekhumoro