2011-03-10 29 views
1

我想從插槽返回一個QObject。我正在使用PySide和QML。我的代碼如下所示:你如何從python返回一個對象到QML?

class myClass(QtCore.QObject): 
    def __init__(self): 
     self.object = QtCore.QObject() 

    QtCore.Slot(result=object) 
    def myFunc(self): 
     return self.object 

當我CONSOLE.LOG返回值,我得到:

QVariant(PySide::PyObjectWrapper) 

我似乎無法獲得價值出了這種事。有人能指出我正確的方向嗎?我可以返回原始類型(如int,str等),但是對象,列表和字典超出了我的範圍。任何幫助將不勝感激。

編輯

我試圖訪問使用點符號對象的屬性。如果有人能夠給我一個這樣的例子,這將是非常有幫助的。但是,如果我能夠把對象拿回來,我想我可以自己走開。再次感謝!

感謝

傑克

+0

什麼是QML樣子?你究竟在做什麼? – 2011-06-14 11:19:20

+0

哇!我不知道這個問題有多老! – 2011-06-15 07:25:08

回答

2

所以,這裏是什麼,做什麼,我想正在試圖做。當你點擊任何地方時,藍色區域變綠。這是通過更改信號傳遞的對象的顏色屬性來完成的。

#!/usr/bin/env python 

import sys 
from PySide import QtCore 
from PySide.QtGui import QApplication 
from PySide.QtDeclarative import QDeclarativeView 
from PySide.QtOpenGL import QGLWidget 

def some_function(passed_object): 
    passed_object.setProperty("color", "green") 

def main(argv): 
    app = QApplication(argv) 

    display_widget = QDeclarativeView() 
    display_widget.setViewport(QGLWidget()) 

    display_widget.setResizeMode(QDeclarativeView.SizeRootObjectToView) 
    display_widget.setSource(QtCore.QUrl('pass_an_object.qml')) 

    display_widget.rootObject().object_signal.connect(some_function) 

    display_widget.show() 
    display_widget.resize(640,480) 

    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main(sys.argv) 

並結合QML文件(我把它叫做pass_an_object.qml):

import QtQuick 1.0 

Rectangle { 
    id: foo 
    width: 640 
    height: 640 
    color: "red" 

    signal object_signal(variant foo) 

    Rectangle { 
     id: an_object 
     width: 100 
     height: 100 
     color: "blue" 
    } 

    MouseArea { 
     anchors.fill: parent 
     onClicked: { 
      object_signal(an_object) 
     } 

    } 
}