QML矩形:检测到由布局管理的项目上的锚点。这是未定义的行为;请改用Layout.alignment

时间:2019-04-08 05:01:43

标签: qt qml

我正在使用qml在qt中进行自定义控件

尝试使用qt的先前版本期望5.11可以正常工作,我不知道我需要更改什么,请问有人可以帮助


Rectangle{
    width: parent.width - 30
    height: 25
    anchors.leftMargin: 15
    anchors.left: parent.left
    color: "transparent"
    visible: (!auto_start)
    RowLayout{
        anchors.fill: parent
        Text{
            text: "Frame Rate:"
            anchors.leftMargin: 10
            anchors.left: parent.left
            font.pointSize: 13
            font.family: fontFamily.name
        }
        Text{
            id: framesValueLabel
            text: "0 fps"
            font.bold: true
            anchors.right: parent.right
            anchors.rightMargin: 10
            font.pointSize: 13
            font.family: fontFamily.name
        }
    }
}

以前的版本可以正常运行,而现在的qt5.11可以正常运行,但是在控制台中显示很多警告错误

1 个答案:

答案 0 :(得分:3)

您不应将锚点与布局结合使用,因为它们都可以完成定位项目的相似任务。

如警告所示:

Detected anchors on an item that is managed by a layout. This is undefined behavior; use Layout.alignment instead.

也许在以前的版本中,Qt并不聪明,无法检测到这些可能的错误,所以我没有指出。

因此解决方案是使用Layout.alignment,Layout.leftMargin和Layout.rightMargin:

Rectangle{
    width: parent.width - 30
    height: 25
    anchors.leftMargin: 15
    anchors.left: parent.left
    color: "blue"
    visible: (!auto_start)
    RowLayout{
        anchors.fill: parent
        Text{
            text: "Frame Rate:"
            Layout.leftMargin: 10
            Layout.alignment : Qt.AlignLeft
            font.pointSize: 13
            font.family: fontFamily.name
        }
        Text{
            id: framesValueLabel
            text: "0 fps"
            font.bold: true
            Layout.alignment : Qt.AlignRight
            Layout.rightMargin: 10
            font.pointSize: 13
            font.family: fontFamily.name
        }
    }
}