if语句无法到达,如何避免

时间:2018-10-09 12:37:24

标签: qt qml

我在Qt 5.9.4中有以下代码:

ButtonStyle {
    padding.top: 0
    padding.bottom: 0
    padding.right: 0
    padding.left: 0
    background: Rectangle {
        implicitHeight: enableButton.height
        implicitWidth: enableButton.width
        color: {
            if ((buttonEnabled || hoverAlways) && enabled) {
                if (propertyButton.hovered)
                    hoveredBgColor
                else
                    defaultBgColor
            } else {
                selectedBgColor
            }
            if (propertyButton.pressed)
                selectedBgColor
        }
    }
}

我在Qt 5.11.2上收到以下警告:

  

无法将[undefined]分配给QColor

上述警告的解决方案是使用return语句,如下所示:

ButtonStyle {
    padding.top: 0
    padding.bottom: 0
    padding.right: 0
    padding.left: 0
    background: Rectangle {
        implicitHeight: enableButton.height
        implicitWidth: enableButton.width
        color: {
            if ((buttonEnabled || hoverAlways) && enabled) {
                if (propertyButton.hovered)
                    return hoveredBgColor // return here
                else
                    return defaultBgColor // return here
            } else {
                return selectedBgColor // return here
            }
            if (propertyButton.pressed) // this condition is unreachable
                return selectedBgColor // return here
        }
    }
}

添加上述return语句后,警告已解决,但是if (propertyButton.pressed)语句变得不可访问。我不知道如何避免这种无法到达的状况。

1 个答案:

答案 0 :(得分:2)

由于使用return使控制权离开代码块,因此最佳实践是确保首先处理所有特殊情况。

根据您的情况,将最后一个检查移到该块的顶部,例如:

ButtonStyle {
    padding.top: 0
    padding.bottom: 0
    padding.right: 0
    padding.left: 0
    background: Rectangle {
        implicitHeight: enableButton.height
        implicitWidth: enableButton.width
        color: {
            if (propertyButton.pressed) // moved up from below if-else block
                return selectedBgColor  //
            if ((buttonEnabled || hoverAlways) && enabled) {
                if (propertyButton.hovered)
                    return hoveredBgColor
                else
                    return defaultBgColor
            } else {
                return selectedBgColor
            }
        }
    }
}