如何在父窗体调整大小时自动调整QML TextField的尺寸
你的代码无法实现自适应缩放的核心原因是外层容器没有正确绑定窗体大小:根Item使用anchors.centerIn: parent仅能实现居中效果,自身大小不会跟随父窗体变化,内层Layout的填充属性无法生效。
你只需要调整外层容器的锚定规则,补充Layout填充属性即可,修改后的完整代码如下:
import QtQuick 2.0 import QtQuick.Layouts 1.1 import QtQuick.Controls 1.3 import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 3.0 as PlasmaComponents Item { property alias cfg_mainText: mainText.text // 替换原来的anchors.centerIn,填充满父窗体,四周保留16px固定边距,数值可自行调整 anchors.fill: parent anchors.margins: 16 ColumnLayout { // 让ColumnLayout填充满根Item的所有可用空间 Layout.fillWidth: true Layout.fillHeight: true RowLayout { // 让行布局占满ColumnLayout的宽度 Layout.fillWidth: true Label { text: "Main" } TextField { id: mainText Layout.fillWidth: true placeholderText: "important text here" text: "" // 如果需要TextField高度也跟随窗体自适应,可添加下面这行 // Layout.fillHeight: true } } } }
改动说明
- 根Item改用
anchors.fill: parent绑定父窗体大小,通过anchors.margins设置你需要的窗体和组件之间的固定边距 - 给ColumnLayout添加宽高填充属性,确保布局填满根Item的可用空间
- 给RowLayout添加宽度填充属性,确保行布局占满整行宽度,内部TextField的
Layout.fillWidth才能生效,跟随窗体宽度变化自动调整尺寸
内容的提问来源于stack exchange,提问作者Xaqron
相关产品推荐
相关产品推荐

