Qt Canvas3D 代码中为各种对象设置的那些字符串“名称”属性是啥?
Posted
技术标签:
【中文标题】Qt Canvas3D 代码中为各种对象设置的那些字符串“名称”属性是啥?【英文标题】:What are those string "name" properties set to various objects in Qt Canvas3D code?Qt Canvas3D 代码中为各种对象设置的那些字符串“名称”属性是什么? 【发布时间】:2016-10-04 16:16:00 【问题描述】:例如见this Qt example中的第二个代码sn-p。
这样做:
rttFramebuffer.name = "OffscreenRenderTarget";
我没有在 C++ OpenGL 代码中看到这个,这意味着它可能是 Canvas3D 的东西或 Canvas3D 继承的 WebGL 的东西。然而,快速的谷歌搜索并没有发现任何相关信息。
谁能解释一下为什么这样做以及它做了什么?
【问题讨论】:
使用这样的字符串在“动态”编程语言中很常见,***性能不是问题。不,你不会在 C 或 C++ 中看到很多,因为它在快速代码路径中效率非常低。但也有一些例外——例如 gstreamer。由于它是高度动态和模块化的,枚举没有意义,而是使用字符串来指定对象类型。 @ddriver: "Stringly-typed" (<10k) @ddriver 鉴于有问题的代码相当于QObject::setProperty("name", "OffscreenRenderTarget")
,我不知道你在说什么,真的......一个足够聪明的运行时只会查找一次属性并且每次后续调用都使用QMetaProperty::write
;不过,我不记得 Qt Quick 在其当前的化身中是否这样做了。这段代码一点也不低效。它不是用字符串替换GL_
枚举!
@KubaOber - 鉴于该名称不是必需的,也不需要在示例中的其他任何地方引用,我不知道为什么要首先设置它。无论如何,我是在概括,这一定让你感到困惑。我错误地认为设置它必须是出于预期的未来用途,但事实似乎并非如此。
【参考方案1】:
从createFramebuffer()
返回的对象实例属于Canvas3DFrameBuffer
类,继承Canvas3DAbstractObject
。每个Canvas3DAbstractObject
都有一个name
属性。它等同于但不等同于QObject::objectName
属性。它的使用是可选的,由您决定。示例代码无需设置名称即可正常工作!
绝对不是都不是:
-
与 QML
id
相同,也不是
在GL_
枚举方面没有任何意义,也没有
与在例如帧缓冲目标中的 name 相同glBindFramebuffer
。
【讨论】:
以上是关于Qt Canvas3D 代码中为各种对象设置的那些字符串“名称”属性是啥?的主要内容,如果未能解决你的问题,请参考以下文章