RowLayout ignores Layout.minimumWidth



当窗口太小时,texttext2应该适当地消隐(当空间不足以覆盖整个字符串时显示三个点)。Layout.preferredWidth被设置为text.implicitWidth,并添加了一些填充,但我甚至设置了Layout.minimumWidth,因此当空间不够时,文本可以被省略。似乎RowLayout忽略了Layout.minimumWidth并保留了Layout.preferredWidth,因此文本仍然具有Layout.preferredWidthwidth,并且从未被消除。怎么了?

import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    contentItem.minimumWidth: 50
    RowLayout {
        id: ntoolbarline
        anchors.fill: parent
        Rectangle {
            color: "red"
            Layout.preferredWidth: text.implicitWidth + 40
            Layout.preferredHeight: 25
            Layout.minimumWidth: 25
            Layout.minimumHeight: 25
            Layout.maximumWidth: text.implicitWidth + 40
            Text {
                id: text
                anchors.centerIn: parent
                text: "Foooooooo"
                elide: Text.ElideRight
                width: parent.width - 40
                renderType: Text.NativeRendering
            }
        }
        Rectangle {
            color: "red"
            Layout.preferredWidth: text2.implicitWidth + 40
            Layout.preferredHeight: 25
            Layout.minimumWidth: 25
            Layout.minimumHeight: 25
            Layout.maximumWidth: text2.implicitWidth + 40
            onWidthChanged: console.log("layout item width: " + width) // only one output when app started
            Text {
                id: text2
                anchors.centerIn: parent
                text: "Baaaaaaaar"
                elide: Text.ElideRight
                width: parent.width - 40
                renderType: Text.NativeRendering
            }
        }
        Item {
            id: spacer
            Layout.fillWidth: true
            onWidthChanged: console.log("spacer width: " + width) // outputs whenever the window is resized
        }
    }
}

这里有两个主要问题:

  1. 未定义fillWidth
  2. TextcenterInRectangle

没有1。CCD_ 15s不能在期望的约束内生长或收缩。通过使用2。CCD_ 16元素对其大小和边界没有特定约束,因此CCD_。正确的方法是使用fill并通过TextverticalAlignmenthorizontalAlignment设置对齐。

最后重新访问的代码如下所示:

import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1
ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480
    minimumWidth: 50
    title: qsTr("Hello World")
    RowLayout {
        id: ntoolbarline
        anchors.fill: parent
        Rectangle {
            color: "red"
            Layout.fillWidth: true
            Layout.preferredWidth: text.implicitWidth + 40
            Layout.preferredHeight: 25
            Layout.minimumWidth: 25
            Layout.maximumWidth: text.implicitWidth + 40
            Text {
                id: text
                anchors.fill: parent
                text: "Foooooooo"
                elide: Text.ElideRight
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                renderType: Text.NativeRendering
            }
        }
        Rectangle {
            color: "red"
            Layout.fillWidth: true
            Layout.preferredWidth: text.implicitWidth + 40
            Layout.preferredHeight: 25
            Layout.minimumWidth: 25
            Layout.maximumWidth: text.implicitWidth + 40
            Text {
                id: text2
                anchors.fill: parent
                text: "Baaaaaaaar"
                elide: Text.ElideRight
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                renderType: Text.NativeRendering
            }
        }
        Item {
            id: spacer
            Layout.fillWidth: true
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新