C
操作元素可见性
元素可见性通过元素属性 "eyeball" 控制。此属性可以为每个元素在每个幻灯片上单独设置。参见工作室:时间线调色板。
"eyeball" 属性也可以通过运行时数据输入或 setAttribute API 控制。
"eyeball" 属性不仅控制元素可见性,还控制整个元素的活动状态。元素活动状态确定元素是否参与动画,或者在任意给定的时刻它是否存在于场景中。因此,更改元素眼球的状_int8_态不仅仅是隐藏或揭示现有元素。
使用数据输入来控制活动状态
布尔类型的数据输入可以绑定到元素的 "eyeball" 属性,并用于控制元素活动状态。有关详情,请参见使用数据输入。
主幻灯片元素与单个幻灯片元素相比
当使用数据输入更改元素眼球属性时,运行时行为取决于元素是否存在于主幻灯片上,或者存在于单个幻灯片上。
对于主幻灯片上的元素,数据输入控制是持久的。 这意味着在通过数据输入更改元素可见性之后,元素不再受到幻灯片中设置的可见性状态的影响,不会在幻灯片切换时更改可见性。这有助于避免 - 经常很棘手! - 由几个来源控制的元素可见性问题。
对于存在于单个幻灯片上的元素,数据输入的可见性控制不是持久的。 可以使用数据输入设置元素可见性,但当日元素所在幻灯片再次进入时,元素可见性将具有在编辑器中为其分配的状态。
setAttribute API 可见性控制与数据输入的对
Q3DSElement::setAttribute API 也可以用于直接设置眼球属性。对于使用 setAttribute API 完成的任何可见性更改,都不会应用可见性持续性。
注意: 数据输入是控制元素属性的首选方法。
注意: 混合使用 setAttribute 和数据输入控制可能会产生意外行为。由于性能优化,Q3DSDataInput::setValue API 默认仅在新的数据输入值与旧值不同时才生成更改事件。因此,数据输入可能会丢弃即使底层目标元素可见性实际上已被其他控制者更改的值。有关示例,请参见动态可见性控制最佳实践。
动态可见性控制的最佳实践
如果主幻灯片上的元素必须进行动态控制,请考虑以下方法
- 使用单个可见性控制器,而不是依赖幻灯片切换、数据输入和 setAttribute 调用的组合。例如,以下将元素 "Element" 的可见性与数据输入
visCtrlDI
绑定的序列将失败,并使 "Element" 处于不可见状态visCtrlDI.setValue(true) Element.setAttribute("eyeball", false) visCtrlDI.setValue(true) // this value change will be discarded, because force=true is not set
- 对于数据输入控制的元素,在呈现就绪(presentationReady)时通过数据输入显式设置可见性,以确保可见性处于已知状态。这也确保了主幻灯片元素的可见性持久并且不受幻灯片过渡的影响。使用参数force = true。
- 使用幻灯片改变信号和数据输入在幻灯片过渡时显式设置元素可见性,特别是在主幻灯片元素中。不要依赖于在幻灯片中设置的可见性状态。
- 为了确保在当前数据输入值情况下确实创建了可见性更改事件,请在Q3DSdata input::setValue接口中使用force=true参数。当force参数设置为true时,不要无谓地调用setValue,因为这可能会对性能产生负面影响。
调试元素可见性问题
幻灯片改变后元素可见性错误,元素位于主幻灯片上,并且在这次改变之前使用数据输入更改了可见性(眼球符号)?
由于数据输入控制覆盖了它们,因此不再使用基于幻灯片的可见状态。确保所有可见性更改都使用数据输入来完成。
使用Q3DSElement::setAttribute更改了元素可见性,而现在数据输入可见性设置没有效果?
不要混合使用setAttribute、基于幻灯片的和数据输入可见性控制。使用Q3DSDataInput::setValue API的force = true参数以确保数据输入不会丢弃传入的值。
元素不在主幻灯片上,且在幻灯片改变后数据输入可见性控制没有效果?
元素可见性可能已经被幻灯片过渡更改。如果新值与之前设置的值没有不同,数据输入不会创建更改事件。使用force = true参数来绕过此优化。还要记住,对于非主幻灯片元素,数据输入控制不是持久的。稍后进入此幻灯片时,又会将可见性设置为基于幻灯片的初始值。
在某些Qt许可证下提供。
了解更多信息。