QML无法锚定到布局中的项目

时间:2019-05-24 16:19:23

标签: qt qml

观察这个简单的例子:

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.2

ApplicationWindow {
    visible: true
    width: 100
    height: 100

    Label {
        text: "foobar"

        anchors.bottom: row.top
        anchors.left: label1.right
    }

    RowLayout {
        id: row
        anchors.bottom: parent.bottom
        width: parent.width

        Label {
            id: label1
            text: "hello1"
            Layout.alignment: Qt.AlignLeft
        }
        Label {
            id: label2
            text: "hello2"
            Layout.alignment: Qt.AlignRight
        }
    }
}

我在行布局中有两个项目,我想将第三个标签锚定到其中一个。这就是我得到的: foobad

我希望foobar更加正确,但这不是我能得到的。

此外,我为此标签设置的任何边距也会被忽略。

我可以锚定到窗口或RowLayout,它会很好地工作,但是由于某些原因,我无法锚定到布局内的项目。是什么原因,什么是合适的解决方案?

1 个答案:

答案 0 :(得分:2)

编译程序时,会出现错误:Cannot anchor to an item that isn't a parent or sibling.这是一个answer,为什么您无法定位。我的解决方法是,将锚定在的左侧,然后在行内使用 label1 的宽度设置边距。

这是屏幕截图。

import QtQuick 2.9
import QtQuick.Controls 2.2
import QtQuick.Layouts 1.2

ApplicationWindow {
    visible: true
    width: 100
    height: 100

    Label {
        color: "#b7087d"
        text: "foobar"

        anchors.bottom: row.top
        anchors.left: row.left
        anchors.leftMargin: label1.width
    }

    RowLayout {
        id: row
        anchors.bottom: parent.bottom
        width: parent.width

        Label {
            id: label1
            color: "#b22424"
            text: "hello1"
            Layout.alignment: Qt.AlignLeft
        }
        Label {
            id: label2
            color: "#1e62ce"
            text: "hello2"
            Layout.alignment: Qt.AlignRight
        }
    }
}