无法将 Qt3DCore::Quick::Quick3DEntity 分配给 QQmlComponent

Posted

技术标签:

【中文标题】无法将 Qt3DCore::Quick::Quick3DEntity 分配给 QQmlComponent【英文标题】:Unable to assign Qt3DCore::Quick::Quick3DEntity to QQmlComponent 【发布时间】:2020-11-23 09:42:04 【问题描述】:

尝试向自定义 Qt3D 实体添加类似委托的属性:

MyEntity.qml:

Entity 
    id: root
    default property Entity delegate // <-- MyEntity.qml:26
    property int n: 1
    property matrix4x4 t

    NodeInstantiator 
        id: rep
        model: root.n
        delegate: Entity 
            components: [
                Transform 
                    matrix: 
                        var m = root.t
                        for(var i = 1; i < rep.index; i++)
                            m = m.times(root.t)
                        return m
                    
                
            ]
            NodeInstantiator 
                delegate: root.delegate
            
        
    

用法:

MyEntity 
    t: Qt.matrix4x4(
           1, 0, 0, 0.1,
           0, 1, 0, 0,
           0, 0, 1, 0,
           0, 0, 0, 1
    )
    n: 5
    Entity ...

结果:

qrc:/MyEntity.qml:26:17:

【问题讨论】:

你如何分配给root.delegate?请提供minimal reproducible example。 delegateMyEntity 的默认属性。在第二个代码块(用法)中,它在最后一行(Entity ... )中分配。我可以明确地做到这一点,即MyEntity delegate: Entity ... ,同样的事情。 你的问题不清楚,但可能你分配了 Item (一个实例)而不是 component (一个类型)。 @folibis 问题很清楚,最小且可重复:只需将我的代码粘贴到任何 Qt3D 空应用程序中,我不需要在此处包含它,因为它太长了。顺便说一句,你的猜测是错误的。 【参考方案1】:

属性声明:

default property Entity delegate

必须改为:

default property Component delegate

正常工作。

【讨论】:

以上是关于无法将 Qt3DCore::Quick::Quick3DEntity 分配给 QQmlComponent的主要内容,如果未能解决你的问题,请参考以下文章

无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

无法将类型为“System.Collections.Generic.List`1[EPMS.Domain.SingleItem]”的对象强制转换为类型“EPMS

无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV

无法将 ReactiveUI 添加到 NUnit 测试项目

“无法将图像数据写入路径” - Laravel 图像干预