Qt 如何发送动态创建的对象';s指向self(this)作为信号参数的指针

Qt 如何发送动态创建的对象';s指向self(this)作为信号参数的指针,qt,qml,qt5,signals-slots,Qt,Qml,Qt5,Signals Slots,我有许多动态创建的qml对象,它们有一个显式声明的父对象。我想将每个对象的每个信号连接到其父对象的方法,并且我需要区分哪个对象发送了信号。我想发送对象指针作为信号参数。这可能吗?如果不是我如何才能实现我想要的?你想要实现什么还不太清楚,我只是想我做对了。 因此,您可以使用子项id,它与此类似 如果使用Qt.createComponent动态创建项目,只需用以下代码替换Repeater: Component.onCompleted: { for(var i = 0;i < 5;i +

我有许多动态创建的qml对象,它们有一个显式声明的父对象。我想将每个对象的每个信号连接到其父对象的方法,并且我需要区分哪个对象发送了信号。我想发送对象指针作为信号参数。这可能吗?如果不是我如何才能实现我想要的?

你想要实现什么还不太清楚,我只是想我做对了。 因此,您可以使用子项id,它与此类似

如果使用
Qt.createComponent
动态创建项目,只需用以下代码替换
Repeater

Component.onCompleted: {
    for(var i = 0;i < 5;i ++)
    {
        var component = Qt.createComponent("Test.qml");
        if (component.status === Component.Ready)
        {
            var obj = component.createObject(root);
            obj.color = Qt.rgba(Math.random(), Math.random(), Math.random(), 1);
            obj.width = 50;
            obj.height = 50;
            obj.pressed1.connect(root.itemClicked);
            obj.pressed2.connect(function(serial){
                root.itemClicked(obj, serial);
            });
        }
    }
}

项目测试提出带有参数的
onPressed
信号。如果您可以修改并添加项目,请使用
按1
。或者在不更改项目的情况下使用
按2
。最后,根项接收到带有项引用和参数的信号。

您试过了吗?@Mitch try到底是什么?我不知道怎么做,这就是我要问的。我认为没有这个指针,因为这不是C++。从我看来,甚至没有办法用Qt的C++信号发送这个,但是我没有TrIEDI,认为C++中的最接近的代码“> > SEDER())/代码>是发送<代码> ObjtTeX< /COD>。然后,可以通过C++提供一些函数,通过代码>对象ObjtNord< /Cord>获取对象的指针。当然,您必须为每个项目指定一个唯一的名称。显然,您编写了一些代码,但没有向我们展示。因此,与其问一个没有最少示例代码的措词不当的问题,然后粗鲁地拒绝回答,不如在问题上花点功夫。你的解决方案似乎可行,但你是在声明性地创建测试对象。这不是我所说的动态对象。我必须根据需要使用Qt.createComponent和createObject函数创建对象。因此,在对象创建之后,我在javascript中只有一个var对象引用。据我所知,连接信号的唯一方法是在信号上使用连接方法,我认为您无法使用该方法实现“root.itemClicked(sender,serial)”。我会接受你的回答,因为我没有说明什么是动态对象。我设法用另一种方法解决了我的案子。谢谢。你没有指出你创建项目的方式,所以我只是以
Repeater
为例。但是您可以以相同的方式使用
Qt.createComponent
。请参阅我的最新答案。
Component.onCompleted: {
    for(var i = 0;i < 5;i ++)
    {
        var component = Qt.createComponent("Test.qml");
        if (component.status === Component.Ready)
        {
            var obj = component.createObject(root);
            obj.color = Qt.rgba(Math.random(), Math.random(), Math.random(), 1);
            obj.width = 50;
            obj.height = 50;
            obj.pressed1.connect(root.itemClicked);
            obj.pressed2.connect(function(serial){
                root.itemClicked(obj, serial);
            });
        }
    }
}
import QtQuick 2.7

Rectangle {
    id: item
    signal pressed1(Item sender, int serial)
    signal pressed2(int serial)
    property int serial: Math.round(Math.random() * 9999)
    MouseArea {
        anchors.fill: parent
        onClicked: {
            item.pressed1(item, item.serial);
            item.pressed2(item.serial);
        }
    }
    Text {
        anchors.centerIn: parent
        text:serial
    }
}