我在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)
语句变得不可访问。我不知道如何避免这种无法到达的状况。
答案 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
}
}
}
}