2016-07-19 4 views

答えて

5

説明するための箇条書きのカップル(私はC++の構文を回避しようとします):

  • PyQtははC++で書かれているのQt、周りのPythonラッパーです。
  • Qtは、QObjectから継承したクラスのイントロスペクションを提供します。頻繁に文字列を使用して物を識別します。 Pythonにはネイティブイントロスペクションがありますが、C++ではネイティブイントロスペクションはありません。
  • 使用した構文は、C++関数シグニチャを使用する"Old-Style Signals and Slots"と呼ばれます。
  • C++にはPythonよりも多くの種類の変数があります。 C++では、変数は値、参照、またはポインタです。 ポインタには型名の後にアスタリスクが付きます。
  • QtCore.SIGNAL("itemClicked(QListWidgetItem *)")QListWidgetItemポインタはなく、アイテム自体であるパラメータを有するitemClickedと呼ばれるQtの信号を指します。 C++で

が、これは次のようになります、

void itemClicked(QListWidgetItem *item); 

は信号またはスロットを識別するために、イントロスペクションのための文字列に戻って、あなたがvoidドロップ;を、変数名(item)、去る:

itemClicked(QListWidgetItem *) 

QtCore.SIGNAL()上記と引用符のペアをラップし、あなたが持っている:

QtCore.SIGNAL("itemClicked(QListWidgetItem *)") 

ポインタとは何ですか?
これについて多くのSOの質問があります。 Here is oneにはいくつかの類義語があり、簡単に答えが得られます。

これが旧式の構文の場合、新しいスタイルは何ですか?
これをもたらすためのFrodonに感謝します。この場合

object.signalName.connect(otherObject.slotName) 

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

in the docsもっとPyQtは、フォーマットで、スロットに信号を接続する複数の "神託" 方法を有します。

+0

ありがとう、ジョン!それは非常に明確な説明です。あなたは私のためにいくつかの謎を解明しました。 – PProteus

+2

@PProteus curiosotyについては、コードは同じですが、新しいスタイルの構文です: 'self.myList.itemClicked.connect(self.ListEventHandler)' – Frodon

+2

古いスタイルの構文は廃止され、もはや廃止されましたpyqt5でサポートされています。新しいpyqtコードではまったく使用すべきではありません。後方互換性のためにpyqt4でのみサポートされています。 – ekhumoro

2

関数itemClickedに唯一の引数としてQListWidgetItemへのポインタが渡されていることを示すためのC++構文です。

「値渡し」ではなく「参照渡し」と考えることができます。

+0

答えてくれてありがとう、James、しかし私はPythonを使っています.C++ではありません。 – PProteus

+2

もちろん、PyQtシグナルのシグネチャは、私が完全に間違っていない限り、C++構文で定義されています。 [This](http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html)は、そうであることを確かに示唆しています。 –

関連する問題