3

我正在尝试从插槽返回一个 QObject。我正在使用 PySide 和 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 等),但对象、列表和字典超出了我的范围。任何帮助将不胜感激。

编辑

我正在尝试使用点表示法访问对象的属性。如果有人可以给我看一个例子,那将非常有帮助。但是,如果我能把那个物体拿回来,我想我可以一个人走远。再次感谢!

谢谢

杰克

4

1 回答 1

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)
        }

    }
}
于 2011-06-14T11:59:50.353 回答