【问题标题】:QML text area, prevent resize of text areaQML文本区域,防止文本区域大小调整
【发布时间】:2021-10-12 02:07:10
【问题描述】:

我正在尝试在 QML 中创建一个简单的窗口,中间有一个巨大的文本区域,底部有几个按钮,

下面是代码

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

Window {
    id: mainWindow
    width: 500
    height: 300
    visible: true
    title: qsTr("Hello World")
    flags: Qt.WindowCloseButtonHint | Qt.CustomizeWindowHint | Qt.Dialog | Qt.WindowTitleHint

    ColumnLayout{
        anchors.fill: parent
        anchors.margins: 5

        RowLayout {
            Layout.alignment: Qt.AlignTop

            TextArea {
                text: "Hello world!"       
            }
        }

        RowLayout {
            Layout.alignment: Qt.AlignBottom | Qt.AlignRight

            Button {
                text: "Ok"
            }
            Button {
                text: "Cancel"
            }
        }
    }
}

但是,当我多次按下回车键几乎到达文本区域的底部时,按钮会移动,因为文本区域会调整大小,我该如何防止这种情况发生? 如何设置文本区域,使其不会调整大小并将按钮推出窗口,但仍会响应,如果窗口调整大小,它会保持其位置,例如按钮仍将位于右侧,并且文本区域会根据锚点进行调整。

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    听起来您希望您的 TextArea 填充按钮上方的空间,但您当前的代码没有这样做。如果我添加一个透明的红色Rectangle 来填充你的TextArea,你可以看到发生了什么:

    这样做的原因是,默认情况下,TextArea 仅与其文本一样大(implicitHeight/implicitWidth)。相反,如果您希望它填充顶部区域,则需要指定Layout.fillHeightLayout.fillWidth。这也意味着您可能不必依赖Layout.Alignment。这是您的代码更新了指定的这些填充并删除了一些对齐属性:

    import QtQuick 2.15
    import QtQuick.Window 2.15
    import QtQuick.Controls 2.12
    import QtQuick.Layouts 1.12
    
    Window {
        id: mainWindow
        width: 500
        height: 300
        visible: true
        title: qsTr("Hello World")
        flags: Qt.WindowCloseButtonHint | Qt.CustomizeWindowHint | Qt.Dialog | Qt.WindowTitleHint
    
        ColumnLayout{
            anchors.fill: parent
            anchors.margins: 5
    
            RowLayout {
    
                TextArea {
                    text: "Hello world!"
                    Layout.fillHeight: true
                    Layout.fillWidth: true
                }
            }
    
            RowLayout {
                Layout.alignment: Qt.AlignRight
    
                Button {
                    text: "Ok"
                }
    
                Button {
                    text: "Cancel"
                }
            }
        }
    }
    

    如果我们添加另一个透明颜色的Rectangle,您可以看到结果,以便直观地清楚发生了什么:

    【讨论】:

    • 但是当它调整大小时,我如何停止 textarea 方块按下按钮?尝试将字符输入到底部
    • 我的代码 sn -p 中的更改解决了这个问题,试试看。 Layout.fillHeight 通过告诉TextArea 高度来填充ColumnLayout 来解决此问题 - 它会将其拉伸以填充从顶部到底部按钮的所有可用空间,这也限制了它在填充文本时超出按钮.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多