QML Row vs. RowLayout



我试图为我的应用程序写一个顶栏,应该主要包含应用程序徽标(一个小图像)和应用程序标题(只是文本)。此外,我希望这个顶部栏可以根据窗口的高度自动调整大小。

我是QML的新手,但我想我应该把这些组件包装在 Row RowLayout 组件中。这是我的示例代码:

import QtQuick 2.0
import QtQuick.Layouts 1.0
Rectangle
{
    id: mainwindow
    width: 1024
    height: 600
    Row
    {
        id: rowlayout
        height: logoimage.height
        spacing: 5
        property int count: 3
        anchors
        {
            left: parent.left
            right: parent.right
            top: parent.top
        }   
        Image
        {   
            id: logoimage
            source: "qrc:/images/resources/images/icon.png"
            height: mainwindow.height / 20
            anchors.top: parent.top
            anchors.left: parent.left
        }   
        Text
        {   
            id: logotext
            text: qsTr("This is my logo text")
            font.pixelSize: parent.height
            font.family: "Sans Serif"
            height: parent.height
            verticalAlignment: Text.AlignVCenter
            anchors.top: parent.top
            anchors.left: logoimage.right
        }
        /*
        Rectangle
        {
            id: otherrect
            height: parent.height
            color: "lightgreen"
            anchors.top: parent.top
            anchors.left: logotext.right
            anchors.right: parent.right
        }
        */
    }
}

我告诉 Row 组件,它的高度应该遵循标志的高度,并告诉 Image (标志)组件,它的高度应该是 Rectangle (主窗口)组件的1/20。

使用 Row 容器,代码的行为如预期的,但我得到一个恼人的警告(QML Row: Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row. Row will not function.),我必须做很多锚定。相反,如果我使用 RowLayout 容器,我可以删除大多数锚,但 Image 完全忽略其 height 属性(但文本仍然正确调整大小)。问题是:

    这是 RowLayout 组件的bug吗?我正在使用Qt-5.1.0-Beta与Android支持,所以这可能是一个解释
  1. 我如何使用 Row 组件而不使用锚,从而避免警告?
  2. 我错过了一些重要的东西,或者我几乎在正确的轨道上,但我必须忍受这个Qt的测试版,直到一个稳定的版本发布?

您说您获得了Row的预期行为,因此您可能应该使用它。Row给出的警告是要求您从它的子元素中删除垂直锚点(top和bottom)。

Row元素为它的子元素提供了类似水平(左和右)锚的行为,但是它不介意你使用顶部和底部锚(注意,顶部和底部不在警告中)。

换句话说,删除"锚"。左"和/或"锚。"logoimage"、"logotext"one_answers"otherrect"(如果你打算在某个时候取消评论的话)中的"Right"行,但不是"anchor"。,这应该会停止警告并保持正确的行为

另一种选择是删除Row元素并使用Item或FocusScope(如果您计划在"top bar"区域中拥有输入元素),这不会试图接管锚定操作,如果您真的喜欢锚定,这可能更适合您。

如果你想让你的布局伸展它的子元素,你需要给它一个宽度,或者用width: parent。宽度,或更好,锚{left: parent.left;右:父母。

1)不,这不是RowLayout的bug2)考虑RowLayout优于Row,因为RowLayout对组件放置最有表现力。Row组件只在图形或动画应用程序中比Rowlayout更好3)稳定版本现在可用,但你的错误不是bug;)

相关内容

  • 没有找到相关文章

最新更新