我试图为我的应用程序写一个顶栏,应该主要包含应用程序徽标(一个小图像)和应用程序标题(只是文本)。此外,我希望这个顶部栏可以根据窗口的高度自动调整大小。
我是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
属性(但文本仍然正确调整大小)。问题是:
- 这是
- 我如何使用
Row
组件而不使用锚,从而避免警告? - 我错过了一些重要的东西,或者我几乎在正确的轨道上,但我必须忍受这个Qt的测试版,直到一个稳定的版本发布?
RowLayout
组件的bug吗?我正在使用Qt-5.1.0-Beta与Android支持,所以这可能是一个解释您说您获得了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;)