4. 使用Row和Column布局
任务目标
在QML中,Row和Column是两种最基础的定位型布局器,分别将子项沿水平方向和垂直方向依次排列。本案例将创建一个包含文本、输入框和按钮的登录表单,使用Column垂直排列标签与输入框,再使用Row将两个按钮水平并排,并演示如何通过spacing属性精确控制子项间距。
环境依赖
需要Qt 5.15或更高版本(或Qt 6.x),以及Qt Quick模块。无需额外安装第三方库。
完整实现
import QtQuick 2.15
import QtQuick.Controls 2.15
ApplicationWindow {
visible: true
width: 320
height: 240
title: "Row and Column Layout"
// 外层使用Column垂直排列两个分组
Column {
anchors.centerIn: parent
spacing: 20 // 两个分组之间的垂直间距
// 第一组:用户名输入(Column垂直排列)
Column {
spacing: 8 // 标签与输入框之间的间距
Text {
text: "用户名"
font.pixelSize: 14
}
TextField {
id: userInput
width: 180
placeholderText: "请输入用户名"
}
}
// 第二组:密码输入(Column垂直排列)
Column {
spacing: 8
Text {
text: "密码"
font.pixelSize: 14
}
TextField {
id: passInput
width: 180
echoMode: TextInput.Password
placeholderText: "请输入密码"
}
}
// 按钮组:使用Row水平排列两个按钮
Row {
spacing: 12 // 两个按钮之间的水平间距
anchors.horizontalCenter: parent.horizontalCenter
Button {
text: "登录"
onClicked: {
// 仅演示布局,不做实际登录逻辑
console.log("点击登录")
}
}
Button {
text: "取消"
onClicked: {
userInput.text = ""
passInput.text = ""
}
}
}
}
}
运行方式
- 将上述代码保存为
main.qml。 - 在项目文件(
.pro)中确保包含QT += quick quickcontrols2,并添加QML_IMPORT_PATH指向Qt Quick Controls 2模块。 - 使用
qmlscene main.qml或通过Qt Creator直接运行该QML文件。
验证方法
- 窗口打开后,观察“用户名”和“密码”两组控件均垂直排列,且每组内标签与输入框间距一致(8像素)。
- 两组之间垂直间距为20像素,明显大于组内间距。
- 底部“登录”和“取消”按钮水平并排,间距为12像素,且整体水平居中于窗口。
- 点击“取消”按钮,两个输入框内容被清空,证明按钮事件绑定正确。
关键点说明
Row和Column的spacing属性控制相邻子项间距,单位为像素。- 若需让某个子项在剩余空间中居中或对齐,可配合
anchors或Layout附加属性使用。 - 当子项宽度不固定时,
Row默认按子项隐式宽度排列;Column默认按子项隐式高度排列。