Прямоугольник QML: обнаружены привязки к элементу, управляемому макетом. Это неопределенное поведение; используйте вместо этого Layout.alignment - PullRequest
2 голосов
/ 08 апреля 2019

я делаю настроенные элементы управления в qt, используя qml

пробовал с предыдущими версиями 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 Ответ

3 голосов
/ 08 апреля 2019

Вы не должны объединять якоря с макетами, так как они оба выполняют схожие задачи по позиционированию элементов.

Как показывает предупреждение:

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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...