【Qt Quick聊天软件练习】二、登录界面搭建

2023-11-04

1 主界面

大概长成这样
在这里插入图片描述

2 创建登录面板qml文件

新建一个qml文件命名为LoginPanel.qml,首先先把右上角两个圆圈搓出来,一个是缩小,一个是关闭。

main.qml中,定义一下id并调用LoginPanel,主窗口的颜色设置为透明,我想在LoginPanel设置背景颜色以及窗口形状

Window {
    id:main_Window
    visible: true
    width: 400
    height: 460
    title: qsTr("Chat")
    color: "transparent"
    flags: Qt.Window | Qt.FramelessWindowHint

    LoginPanel{}
}

禁用原生态的窗口

flags: Qt.Window | Qt.FramelessWindowHint

接下来是LoginPanel.qml中登录界面的操作:
某些属性为了方便快捷设置,我在顶部进行了声明

    property var fontSize: 20//字体大小
    property var iconSize: 20//图标大小
    property var logoSize: 30//logo大小
    property var funcBtnSize: 15//功能按钮大小
    property var photoImageSize: 90//头像大小
    property var inputL_and_RSpacing: 30//输入左右间隔距离

先来设置背景,同样创建个矩形框,这里我设置了边框以及边角的弧度,由于白色有点过于晃眼睛,所以这里我设置成了浅灰色

    //背景
    Rectangle{
        id:rect_bg
        anchors.fill: parent
        color: "#d7dcdc"
        border.color: "black"
        border.width: 1
        radius: 10
    }

在这里插入图片描述
去除边框后,需要设置鼠标按下拖动整个窗口,原理就是记录鼠标按下后的坐标,然后拖动的时候,用窗口的坐标(左上角为原点)+鼠标移动后的坐标-鼠标按下时的坐标

    //鼠标按下拖拽窗口移动
    MouseArea{
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton//只检测鼠标左键
        property var _X: 0
        property var _Y: 0
        onPressed: {
            _X = mouseX
            _Y = mouseY
        }
        onPositionChanged: {
            main_Window.x += mouseX - _X
            main_Window.y += mouseY - _Y
        }
    }

左上角的logo,记得要设置下图片的大小,否则看起来锯齿会比较明显sourceSize

    //左上角图标
    Image{
        id:image_Icon
        width: root.logoSize
        height: root.logoSize
        anchors{
            left: parent.left
            leftMargin: 10
            top: parent.top
            topMargin: 10
        }
        source: "Images/FX.png"
        sourceSize: Qt.size(width,height)
    }

在这里插入图片描述

右上角的两个圆点,第一个是缩小按钮,第二个是关闭按钮

    //右上角功能按钮
    Row{
        anchors.right: parent.right
        anchors.rightMargin: 10
        anchors.top: parent.top
        anchors.topMargin: 10
        spacing: 10
        Rectangle{//缩小
            width: root.funcBtnSize
            height: root.funcBtnSize
            radius: width / 2
            color: "#f5b57f"
            MouseArea{
                anchors.fill: parent
                onClicked: main_Window.showMinimized()
            }
        }
        Rectangle{//关闭
            width: root.funcBtnSize
            height: root.funcBtnSize
            radius: width / 2
            color: "#ee8a8a"
            MouseArea{
                anchors.fill: parent
                onClicked: Qt.quit()
            }
        }
    }

在这里插入图片描述

头像我暂时没去找好看的图片,这里直接用虚线框代替

    Rectangle{
        id:photoImage
        width: root.photoImageSize
        height: root.photoImageSize
        radius: width / 2
        color: "black"
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.top: parent.top
        anchors.topMargin: 50
        Image {
            source: "Images/头像.png"
            anchors.fill: parent
            sourceSize: Qt.size(width,height)
        }
    }

在这里插入图片描述
账号、密码的输入区域,这里的账号我限制了长度一个int的大小,密码设置为输入时用黑心圆圈代替,文本输入我还加上了焦点以及Tab切换

//密码、账号
    Column{
        anchors.horizontalCenter: parent.horizontalCenter
        anchors.top: photoImage.bottom
        anchors.topMargin: 50
        spacing: 60
        //账号输入区域
        Rectangle{
            id:rect_ID_BG
            width: root.width * 0.6
            height: 35
            color: "transparent"
            Rectangle{
                width: root.width * 0.6
                height: 1
                color: "black"
                anchors{
                    bottom: parent.bottom
                }

                Image {
                    id:image_ID
                    width: root.iconSize
                    height: root.iconSize
                    sourceSize: Qt.size(root.iconSize,root.iconSize)
                    source: "Images/账号图标.png"
                    opacity: 0.5
                    anchors{
                        bottom: parent.bottom
                        bottomMargin: 5
                    }
                }
                //账号输入
                TextInput{
                    id:textIn_ID
                    anchors{
                        left: parent.left
                        leftMargin: root.inputL_and_RSpacing
                        right: parent.right
                        rightMargin: root.inputL_and_RSpacing
                        bottom: image_ID.bottom
                    }
                    font{
                        pixelSize: root.fontSize
                        bold: true
                    }
                    validator: IntValidator{bottom: 1;top: 2147483647}
                    clip: true
                    focus: true
                    KeyNavigation.tab: textIn_PassWord
                    selectByMouse: true
                }
            }
        }

        //密码输入区域
        Rectangle{
            id:rect_PassWord_BG
            width: root.width * 0.6
            height: 35
            color: "transparent"
            Rectangle{
                width: root.width * 0.6
                height: 1
                color: "black"
                anchors{
                    bottom: parent.bottom
                }
                Image {
                    id:image_PassWord
                    width: root.iconSize
                    height: root.iconSize
                    sourceSize: Qt.size(root.iconSize,root.iconSize)
                    source: "Images/密码图标.png"
                    opacity: 0.5
                    anchors{
                        bottom: parent.bottom
                        bottomMargin: 5
                    }
                }
                //密码输入
                TextInput{
                    id:textIn_PassWord
                    anchors{
                        left: parent.left
                        leftMargin: root.inputL_and_RSpacing
                        right: parent.right
                        rightMargin: root.inputL_and_RSpacing
                        bottom: image_PassWord.bottom
                    }
                    font{
                        pixelSize: root.fontSize
                        bold: true
                    }
                    echoMode:TextInput.Password
                    clip: true
                    focus: true
                    KeyNavigation.tab: textIn_ID
                    selectByMouse: true
                }
            }
        }
    }

在这里插入图片描述
最后是登录按钮

    //登录按钮
    Rectangle{
        id:rect_LoginBtn
        width: parent.width * 0.3
        height: parent.height * 0.1
        radius: 10
        border{
            width: 1
            color: "black"
        }

        anchors{
            horizontalCenter: parent.horizontalCenter
            bottom: parent.bottom
            bottomMargin: 20
        }

        Text {
            id: text_Login
            text: qsTr("登 录")
            font{
                pixelSize: 18
                bold: true
            }
            anchors.centerIn: parent
        }

        MouseArea{
            anchors.fill: parent
            onClicked: {

            }
        }
    }

整体下来就是长这样子,一个比较简单的界面搭建,没有太出众的美术天赋,只能说具备了基本的界面
在这里插入图片描述

3 补充

昨天搞忘了记住密码、忘记密码、注册账号这三个文本

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Qt Quick聊天软件练习】二、登录界面搭建 的相关文章

随机推荐

  • MySQL必知必会——第十六章创建高级联结

    创建高级联结 本章将讲解另外一些联结类型 包括它们的含义和使用方法 介绍如何对被联结的表使用表别名和聚集函数 使用表别名 第十章 MySQL必知必会 第十章创建计算字段 介绍了如何使用别名引用表列 mysql gt SELECT Conca
  • 股市股票基金市场研报合集(2022年,共195份)

    合集名称 股市股票基金市场研报合集 数量 195份 具体内容 股票基金市场 2021Q4公募基金及陆股通持仓分析 内外资加仓成长 减持消费 周期 20220125 华安证券 42页 pdf 股票基金市场 2021Q4公募基金持股分析 风险偏
  • php 微信分享好友朋友圈自定义标题 描述和图片 报错 63002,invalid signature

    之前搞过一次一直没有记录 导致这次操作的时候有点吃力报错 一直给我报错63002 invalid signature 记得第一次搞的时候很快啊 这次卡了几个小时时间去排查 首先我们要根据微信官方文档排查 确定不是自己参数问题 进入官方文档
  • C#笔记2——如何实现treeview的单击功能

    C 笔记2 如何实现treeview的单击功能 近来做了一个课设 需要使用treeview 并且实现treeview的单击效果 翻了几本教材 都没有具体说如何实现该功能 于是乎各种问度娘 在多次的尝试之下终于实现类单击功能 下面来详细讲解一
  • 乌班图linux分辨率不能调,ubuntu18.04 分辨率设置(双屏幕显示,添加没有的分辨率)...

    时间 2019 03 13 作者 魏文应 要解决什么问题 通过本文 你能够实现类似于以下的效果 给电脑接两个显示器 分别是独立显卡 nvidia 和集成显卡 独立显卡通过 DVI 接口和显示器连接 选择 拼接显示器 选项 扩展显示 ubun
  • mate30升级鸿蒙系数据会被清空吗,145直接升级鸿蒙会不会掉资料

    分享交流 145直接升级鸿蒙会不会掉资料 18919 电梯直达 中二的灵魂 略有小成 发表于 2020 12 19 06 58 28 来自 HUAWEI Mate 30 5G 最新回复 2020 12 19 10 59 19 如题 有升了的
  • 数据结构课程设计c语言运动会管理系统

    参加运动会的有n个学院 学校编号为1 n 比赛分成m个男子项目 和w个女子项目 项目编号为男子1 m 女子m 1 m w 不同的项目取前八名积分 且前八名的积分分别为 9 7 6 5 4 3 2 1 m lt 20 n lt 20 功能要求
  • 【操作系统】王道考研 p46 页面分配策略

    页面分配策略 知识总览 驻留集 页面分配 置换策略 驻留集 给进程分配的物理块的集合 分配小了装不下 会频繁缺页中断 分配大了 给一个进程分配多了物理块 别的进程就少了 并发性下降 全局置换 把空闲的分给缺页进程 或把别的进程持有的物理块置
  • win11与Ubuntu 20.04 WSL进行文件互换

    WSL有一个很大的优点就是支持与Windows文件系统的互操作 可以访问和处理Windows文件系统中的文件 从而方便用户在Windows和Linux之间共享数据 通过WSL子系统终端访问Windows系统文件 在WSL中 Windows文
  • 关于redirect重定向的使用以及和二维码的结合

    redirect叫做重定向 重定向其实就是最后跳转是靠浏览器去跳转的 对比的就是转发 所有的跳转都是有web服务器来跳转 上面这个图说的不全面 因为除了页面 接口请求也是可以跳转的 比如请求接口1 接口1返回一个接口2 浏览器重定向接口2
  • 函数隐藏

    1 函数隐藏 派生类中函数名字与基类的成员函数名字相同时 派生类的成员函数会屏蔽基类中同名的成员函数 派生类中的成员变量与基类的成员变量同名时 派生类中的成员变量会屏蔽基类中同名的成员变量 如果要使用的话要加作用域 通过派生类对象 指针 引
  • 论:栈

    前言 本文从栈的定义开始 根据栈的两种存储结构 顺序和链式 分别实现栈的基本操作 目录 栈的定义 栈的基本操作 顺序栈实现 链式栈实现 栈的定义 栈 只允许通过访问它的一端来实现数据存储和检索的一种线性数据结构 即从固定一端插入数据 删除数
  • 阿里云原生张羽辰:服务发现技术选型那点事儿

    作者 张羽辰 同昭 引子 什么是服务发现 近日来 和很多来自传统行业 国企 政府的客户在沟通技术细节时 发现云原生所代表的技术已经逐渐成为大家的共识 从一个虚无缥缈的概念渐渐变成这些客户的下一个技术战略 自然 应用架构就会提到微服务 以及其
  • git rebase -i 进阶

    今天学习了 git rebase i 这篇文章写的不错 推荐一下 git rebase 详解 但我用的过程中也遇到了一些问题 在record或者edit操作的时候报错了 CONFLICT content Merge conflict in
  • 深度学习课程作业——手写数字识别(卷积神经网络)

    本实验过程需要用到torchvision包 没有安装的小伙伴 windows用户可直接使用cmd命令 输入命令行pip install torchvision即可 仍安装不了的 建议csdn直接查找安装教程 一 加载数据集 1 1 导入实验
  • Bean销毁之前的行为

    与上一篇中的定制初始化行为相似 Spring也提供了两种方法定制Bean销毁之前的特定行为 如下 1 使用destroy method属性 2 实现DisposableBean接口 该接口中提供了一个方法 void destroy thro
  • 微信接口 报错61003

    获取授权token报错61003 授权信息已确认无误 要如何解决 请求地址 https api weixin qq com cgi bin component api authorizer token 错误信息 错误代码 61003 错误信
  • 美国职业专家:工作效率和薪水加倍七秘诀

    如果问 你想不想使自己的收入加倍 我猜每个人的答案都是 YES 如果我继续问 你相不相信现在你的收入会加倍 我想有一些人可能会没把握 有一些人认为不太可能 我告诉各位 你们每个人的收入一定会加 倍 因为按照每年物价增长率及通货膨胀的正常速度
  • 剑指offer java版 test66—机器人运动路径

    题目 地上有一个m行和n列的方格 一个机器人从坐标0 0的格子开始移动 每一次只能向左 右 上 下四个方向移动一格 但是不能进入行坐标和列坐标的数位之和大于k的格子 例如 当k为18时 机器人能够进入方格 35 37 因为3 5 3 7 1
  • 【Qt Quick聊天软件练习】二、登录界面搭建

    目录 1 主界面 2 创建登录面板qml文件 3 补充 结语 1 主界面 大概长成这样 2 创建登录面板qml文件 新建一个qml文件命名为LoginPanel qml 首先先把右上角两个圆圈搓出来 一个是缩小 一个是关闭 main qml