Qt页面小项目

Qt QML 登录界面项目 完整代码笔记(逐行详解)

一、项目整体结构

你做了一个带图片 + 表单输入框的美观登录/注册界面,包含:

  1. CustomField.qml → 自定义复用输入框组件(标签+输入框)
  2. main.qml → 主窗口(背景渐变 + 白色卡片 + 图片 + 表单)

第一部分:CustomField.qml (自定义输入框组件)

qml 复制代码
// 导入Qt基础控件库 2.0版本
import QtQuick 2.0
// 导入Qt高级控件库 2.12版本
import QtQuick.Controls 2.12

// 列布局:内部元素 垂直 依次排列
Column
{
    id:root                // 给当前组件起唯一ID:root
    property string labeName:""  // 【自定义属性】外部可传入的标签文字
                                // 例:外部写 labeName: "name",这里就会显示
    spacing: 10           // 内部元素之间的间距:10px

    // 标签控件:显示文字
    Label
    {
        text: root.labeName  // 文字内容 = 外部传入的自定义属性 labeName
    }

    // 输入框控件:用户可输入文字
    TextField{
        width: parent.width  // 宽度 = 父组件(Column)的宽度
    }
}

这个组件的作用

标签 + 输入框 打包成一个可复用组件

不用每次都重复写 Label + TextField,直接用 CustomField{} 就行


第二部分:main.qml (主窗口界面)

qml 复制代码
// 导入Qt基础控件
import QtQuick 2.12
// 导入Qt按钮、输入框、布局等基础控件
import QtQuick.Controls 2.5

// 应用主窗口:整个程序的最外层容器
ApplicationWindow {
    id: window             // 窗口ID
    visible: true          // 窗口默认显示
    width: 640             // 窗口宽度 640px
    height: 480            // 窗口高度 480px
    title: qsTr("MiniProject") // 窗口标题(qsTr是国际化翻译函数)

    // 矩形:作为整个窗口的背景
    Rectangle{
        anchors.fill: parent   // 填满父元素(整个窗口)

        // 水平渐变背景
        gradient: Gradient
        {
            orientation:Gradient.Horizontal  // 渐变方向:水平(左→右)
            GradientStop{position:0.5;color:"#ffe5ec"}  // 渐变中点颜色
            GradientStop{position: 1;color: "#ffccd5"}  // 渐变终点颜色
        }

        // 白色卡片:表单容器(圆角、居中)
        Rectangle{
            id:formContral           // 卡片ID
            width: 800               // 卡片宽度
            height: 600              // 卡片高度
            radius:14                // 圆角:14px(让边角变圆)
            color: "white"           // 卡片背景色:白色
            anchors.centerIn: parent // 在父元素(背景)中居中显示

            // 行布局:内部元素 水平 排列(图片 ↔ 表单)
            Row{
                anchors.fill: parent // 填满白色卡片

                // 图片控件:显示左侧图片
                Image {
                    id: formimage
                    source: "qrc:/image/HIT.jpg"  // 图片资源路径
                    height: parent.height        // 图片高度 = 父元素高度
                    width: parent.width/2        // 图片宽度 = 父元素一半
                }

                // 列布局:右侧表单区域(垂直排列)
                Column{
                    width: formContral.width - formimage.width - 2*padding
                    // 宽度 = 总宽度 - 图片宽度 - 左右内边距

                    height: parent.height    // 高度 = 父元素高度
                    spacing: 15              // 表单元素之间的间距
                    padding: 15              // 整体内边距
                    topPadding: 25            // 顶部内边距
                    leftPadding: 20           // 左侧内边距

                    // 标题标签
                    Label{
                        text: "Get Started"        // 显示文字
                        font.bold: true            // 文字加粗
                        font.pointSize: 20         // 文字大小 20号
                    }

                    // =========== 使用你自定义的组件 ===========
                    CustomField{          // 姓名输入框
                        width: parent.width
                        labeName: "name"   // 给自定义组件传值:显示"name"
                    }

                    CustomField{          // 邮箱输入框
                        width: parent.width
                        labeName: "Email"
                    }

                    CustomField{          // 密码输入框
                        width: parent.width
                        labeName: "Password"
                    }
                }
            }
        }
    }
}

三、核心知识点笔记(必看)

1. 布局系统

  • Column垂直布局(上下排列)
  • Row水平布局(左右排列)
  • anchors.fill:填满父元素
  • anchors.centerIn:在父元素中居中

2. 自定义组件(重点)

  • 你写的 CustomField可复用控件
  • property string labeName:""对外接口
  • 外部直接用 labeName: "xxx" 就能修改标签文字

3. 渐变背景

  • Gradient.Horizontal = 水平渐变
  • 至少需要 2 个 GradientStop 才能形成渐变

4. 常用属性

  • radius:圆角
  • spacing:元素间距
  • padding:内边距(内部元素与边框距离)
  • font.bold:文字加粗
  • font.pointSize:文字大小

四、代码中存在的 1 个小错误(已帮你标注)

qml 复制代码
GradientStop{position:0.5;color:"#ffe5ec"}

这里建议改成 position: 0.0(渐变起点),否则渐变会显示异常。

修复后:

qml 复制代码
gradient: Gradient
{
    orientation:Gradient.Horizontal
    GradientStop{position: 0.0; color:"#ffe5ec"}  // 起点
    GradientStop{position: 1.0; color:"#ffccd5"}  // 终点
}

完整总结

  1. CustomField.qml = 封装了 Label + TextField自定义输入框
  2. main.qml = 主窗口,包含:
    • 粉色水平渐变背景
    • 居中白色圆角卡片
    • 左侧图片
    • 右侧表单(标题 + 3个自定义输入框)
相关推荐
水木流年追梦17 分钟前
大模型入门-应用篇3-Agent智能体
开发语言·python·算法·leetcode·正则表达式
凯瑟琳.奥古斯特23 分钟前
假脱机技术原理详解
开发语言·职场和发展
深度学习lover43 分钟前
<数据集>yolo 交通违规标志识别<目标检测>
人工智能·深度学习·yolo·目标检测·计算机视觉·交通违规标志识别
敲代码的瓦龙1 小时前
Java?枚举!!!
java·开发语言
NiceCloud喜云1 小时前
IntelliJ IDEA 保姆级安装 + ClaudeAPI 配置教程
java·开发语言·前端·ide·chrome·docker·intellij-idea
3D探路人2 小时前
模灵 大模型聚合API 转发流程技术实现
java·大数据·开发语言·前端·人工智能·计算机视觉
小短腿的代码世界2 小时前
Qt OpenGL 架构与自定义着色器:源码级解析高性能图形渲染
qt·架构·着色器
l1t2 小时前
JIT执行python脚本的工具codon安装和测试
开发语言·python
Ares-Wang2 小时前
图像》》仿射变换和透视变换放 、图像分割、目标检测
人工智能·计算机视觉
大空大地20262 小时前
# C#基础语法总结
人工智能·计算机视觉