2012-05-08 5 views
2

QMLがConnectionsオブジェクトを使用してPythonから発信されたシグナルを受け取ることができます。残念ながら、私はそのオブジェクトがそのシグナルの引数を受け取る方法を理解することはできません。PySideシグナル引数をQMLから取り出すことができません

私は私が何をしたいのかを示して最小限のテストケースを作成しました:

min.py

from PySide import QtCore, QtGui, QtDeclarative 
import sys 

# init Qt 
app = QtGui.QApplication(sys.argv) 

# set up the signal 
class Signaller(QtCore.QObject): 
    emitted = QtCore.Signal(str) 

signaller = Signaller() 

# Load the QML 
qt_view = QtDeclarative.QDeclarativeView() 
context = qt_view.rootContext() 
context.setContextProperty('signaller', signaller) 
qt_view.setResizeMode(QtDeclarative.QDeclarativeView.SizeRootObjectToView) 
qt_view.setSource('min.qml') 
qt_view.show() 

# launch the signal 
signaller.emitted.emit("Please display THIS text!") 

# Run! 
app.exec_() 

そしてmin.qml

import QtQuick 1.0 

Rectangle { 
    width:300; height:100 

    Text { 
     id: display 
     text: "No signal yet detected!" 

     Connections { 
      target: signaller 
      onEmitted: { 
       display.text = "???" //how to get the argument? 
      } 
     } 
    } 
} 

ありがとうございました!

答えて

2

Qt 4.8以降、PySideは信号パラメータ名をまったく扱っていません。

しかし、あなたが名前付きパラメータでQML信号を作成し、Javascriptを使用して、それにあなたのpythonの信号を接続することができます。

import QtQuick 1.0 

Rectangle { 
    width:300; height:100 


    Text { 
     id: display 
     text: "No signal yet detected!" 

     signal reemitted(string text) 
     Component.onCompleted: signaller.emitted.connect(reemitted) 

     onReemitted: { 
      display.text = text;   
     } 
    } 
} 
+0

ありがとう!それはトリックでした! –

関連する問題