【问题标题】: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 - 鉴于该名称不是必需的,也不需要在示例中的其他任何地方引用,我不知道为什么要首先设置它。无论如何,我是在概括,这一定让你感到困惑。我错误地认为设置它必须是出于预期的未来用途,但事实似乎并非如此。

标签: javascript qt qml qtquick2


【解决方案1】:

createFramebuffer() 返回的对象实例属于Canvas3DFrameBuffer 类,继承Canvas3DAbstractObject。每个Canvas3DAbstractObject 都有一个name 属性。它等同于但不等同于QObject::objectName 属性。它的使用是可选的,由您决定。示例代码无需设置名称即可正常工作!

绝对不是都不是

  1. 与 QML id 相同,也不是
  2. GL_ 枚举方面没有任何意义,也没有
  3. 与在例如帧缓冲目标中的 name 相同glBindFramebuffer

【讨论】:

    猜你喜欢
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多