QML:有条件地设置属性组的不同属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QML:有条件地设置属性组的不同属性相关的知识,希望对你有一定的参考价值。

如何有条件地一次性设置属性组的不同属性?

示例:假设有一个上下文属性_context.condition可用。鉴于该值,我想为qml项设置不同的锚点。

// Some item...
Rectangle {
    id: square
    width: 50
    height: 50

    // For simple properties this should work:
    color: { if (_context.condition) "blue"; else "red" }

    // But how to do it for complex properties like 'anchors'?
    // Note that I set different properties for different values of the condition.
    // Here is how I would do it, but this does not work:
    anchors: { 
        if (_context.condition) {
            // Anchors set 1:
            horizontalCenter: parent.horizontalCenter
            bottom: parent.bottom
            bottomMargin: 20
        } else {
            // Anchors set 2:
            verticalCenter: parent.verticalCenter
            right: parent.right
            rightMargin: 20
        }
    }
}

我在Qt 5.3中使用QtQuick 2.0。谢谢!

答案

你可以尝试这个(未测试):

anchors {
        horizontalCenter: _context.condition ? parent.horizontalCenter : undefined;
        bottom: _context.condition ? parent.bottom : undefined;
        bottomMargin: _context.condition ? 20 : undefined;
        verticalCenter: _context.condition ? undefined : parent.verticalCenter;    
        right: _context.condition ? undefined : parent.right;
        rightMargin: _context.condition ? undefined : 20;
        }

Resetting properties values

另外,根据this空花括号可用于重置属性值:

Item {
    property var first:  {}   // nothing = undefined
    property var second: {{}} // empty expression block = undefined
    property var third:  ({}) // empty object
}

以上是关于QML:有条件地设置属性组的不同属性的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地禁用 QML 绑定到 C++ 后端?

用于更新属性的 QML 条件逻辑

26.Qt Quick QML-RotationAnimationPathAnimationSmoothedAnimationBehaviorPauseAnimationSequential(代码片段

属性别名自引用?这个 QML 代码在做啥?

是否可以在单独的线程中将 QObject 设置为 QML 上下文属性?

s-s-rS 2008 中组的条件分页符