qt - 如何将动态创建的对象的指针作为信号参数发送到 self(this)
问题描述
我有许多动态创建的 qml 对象,它们有一个显式声明的父对象。我想将每个对象的每个信号都连接到其父方法,并且我需要区分哪个对象发送了信号。我想将对象指针作为信号参数发送。这可能吗?如果不是我怎么能达到我想要的?
解决方案
目前还不清楚你想要实现什么,我只是想我做对了。因此,您可以使用与this类似的子项 id 。
import QtQuick 2.7
import QtQuick.Window 2.2
Window {
id: window
title: "test"
visible: true
width: 400
height: 400
Row {
anchors.centerIn: parent
id: root
function itemClicked(item, serial)
{
console.log("Item (" + item + ") with serial: " + serial + " was clicked");
}
Repeater {
model: 5
delegate: Test {
width: 50
height: 50
color: Qt.rgba(Math.random(),Math.random(),Math.random(),1)
onPressed1: root.itemClicked(sender, serial)
Connections {
onPressed2: root.itemClicked(target, serial);
}
}
}
}
}
如果您使用 动态创建项目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);
});
}
}
}
测试.qml
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
}
}
项目测试建议onPressed
带有参数的信号。pressed1
如果您可以修改您的项目并添加它,请使用它。或使用pressed2
不改变项目。最后,根项目接收到带有项目引用和参数的信号。
推荐阅读
- python - 如何从python中的文件中删除符号?
- php - CakePHP 3.6.17:带排序的急切加载
- reactjs - 如何使错误消息显示:无和显示:块?
- macos - Mac OSX 世界 Pkg 或 Dmg 的趋势是什么?
- javascript - 通过增加或减少输入框中的数量来更新糖果的总成本 - React JS
- nativescript - 获取 ListView 滚动位置
- java - 如何在 Windows 10 上正确使用 Randoop?
- c# - 使用什么类型的队列?
- django - Django 查询错误:int() 参数必须是字符串、类似字节的对象或数字,而不是 'datetime.timedelta'
- python - 在使用 keras 进行回归训练期间跟踪准确性