QML-简单项目实战一

一、简介

使用QML创建一个简单的登录界面,代码内容来源于bilibili中的视频。

实现效果图如下:

二、实现步骤

  1. 核心控件和布局管理和登录事件处理

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Window 2.12
/*1. 核心控件和布局管理和登录事件处理文本说明:登录系统用户名:username密码:password登录按钮:submit登录事件处理onClicked
*/
ApplicationWindow{ //窗口visible: truewidth: 1280height: 800title: qsTr("qml简单的登录界面")id:rootcolor: "lightblue"Rectangle{color: "red"width: parent.width/2height: parent.height/2anchors.centerIn: parentText { //文本说明:登录系统x: 530y:130width: 120height: 30font.pointSize: 24text: qsTr("登录系统") // 后续可以进行翻译}
//        用户名:usernameTextField{id:usernamex:440y:200width: 300height: 50font.pixelSize: 20}
//        密码:passwordTextField{id:passwordx:username.xy:username.y + username.height +10width: username.widthheight: username.heightfont.pixelSize: username.font.pixelSizeechoMode: TextInput.Password  //设置输入模式为密码,设置后不能输入中文}
//        登录按钮:submitButton{id:submitx:password.xy:password.y +password.height + 10width: password.widthheight: password.heighttext: qsTr("登录")font.pixelSize: username.font.pixelSizeonClicked: {console.log("登录: "+username.text+":"+ password.text)print("登录: ",username.text,":",password.text)}}}}

2.样式优化、背景渐变、图标自动替换

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Window 2.12
import QtGraphicalEffects 1.0  //渐变色需要导入的库
//import QtQuick.Controls.Material 2.12
//import QtQuick.Controls.Universal 2.12/*
1. 核心控件和布局管理和登录事件处理文本说明:登录系统用户名:username密码:password登录按钮:submit登录事件处理onClicked
2.样式优化、背景渐变、图标自动替换3.窗口拖动、去掉原有标题栏、做圆角窗口拖动
4.动画事件、控件动态出现、图片转动画*/
ApplicationWindow{ //窗口visible: truewidth: 1280height: 800title: qsTr("qml简单的登录界面")id:rootRectangle{color: "red"width: parent.widthheight: parent.heightanchors.centerIn: parentgradient:  Gradient{ //设置渐变色,渐变色优先级大于color颜色GradientStop{position: 0 ;color: "#4158d0" }GradientStop{position: 1 ;color: "#c850c0" }orientation: Gradient.Horizontal // 设置方向}//居中矩阵设置Rectangle{width: 800height: 500anchors.centerIn: parentradius:10 // 设置圆角//插入图片Image{x:57y:100
//                source: "./test.png"  // 必须要添加在资源文件中才能够加载,width,height 可以不设置采用图片的source: "file:///D://C++/C++.png"  //不在资源文件中要使用file:///  D:/可省去}Text { //文本说明:登录系统x: 530y:130width: 120height: 30font.pointSize: 24text: qsTr("登录系统") // 后续可以进行翻译color: "#333333"}//        用户名:usernameTextField{id:usernamex:440y:200width: 300height: 50font.pixelSize: 20placeholderText: "输入用户名"placeholderTextColor: "#999999"color: "#666666"leftPadding: 60background: Rectangle{color: "#e6e6e6"border.color: "#e6e6e6"radius: 25}//用户图标Image{width:20;height: 20x:30;y:15source:username.activeFocus ? "file:///C++\\qml\\ttt\\pic\\tongdaoxinxi-select.png": "file:///C++\\qml\\ttt\\pic\\tongdaoxinxi-unselect.png" //省略D:/ 路径可以用 \\ / //}}//        密码:passwordTextField{placeholderText: "输入密码"id:passwordx:username.xy:username.y + username.height +10width: username.widthheight: username.heightleftPadding: username.leftPaddingfont.pixelSize: username.font.pixelSizeechoMode: TextInput.Password  //设置输入模式为密码,设置后不能输入中文
//                background: username.background //不能用这种方法,会把上面的背景换掉 因为对象只有一份 todobackground: Rectangle{color: username.background.color //颜色复用border.color: username.background.border.colorradius: 25}//密码图标Image{width:20;height: 20x:30;y:15source:password.activeFocus ? "file:///C++\\qml\\ttt\\pic\\wenben-select.png": "file:///C++\\qml\\ttt\\pic\\wenben-unselect.png" //省略D:/ 路径可以用 \\ / //}}//        登录按钮:submitButton{id:submitx:password.xy:password.y +password.height + 10width: password.widthheight: password.heighttext: qsTr("登录")palette.buttonText: "white"  //在本人电脑上测试,虽然qml会报错误:palette没有buttonText属性,但是可以运行font.pixelSize: username.font.pixelSizeonClicked: {
//                    submit.contentItem.color = "red" //这种方法可以改变按钮的颜色,但是在外面改变不了console.log("登录: "+username.text+":"+ password.text)print("登录: ",username.text,":",password.text)}background: Rectangle{radius:25color: {//可以判断状态来设置颜色if(submit.down)return "#00b846"else if(submit.hovered)return "#333333"elsereturn "#57b864"}}}} //中间矩形} //主体矩形} //窗口

3.窗口拖动、去掉原有标题栏、做圆角窗口拖动

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Window 2.12
import QtGraphicalEffects 1.0  //渐变色需要导入的库
//import QtQuick.Controls.Material 2.12
//import QtQuick.Controls.Universal 2.12/*
1. 核心控件和布局管理和登录事件处理文本说明:登录系统用户名:username密码:password登录按钮:submit登录事件处理onClicked
2.样式优化、背景渐变、图标自动替换3.窗口拖动、去掉原有标题栏、做圆角窗口拖动
4.动画事件、控件动态出现、图片转动画*/
ApplicationWindow{ //窗口visible: truewidth: 1280height: 800title: qsTr("qml简单的登录界面")id:rootcolor: "#00000000" //因为边框圆角的问题,可以设置下透明flags: Qt.Window | Qt.FramelessWindowHint //属性,标题栏隐藏 无框窗口提示,必须要前面的,不然系统桌面菜单栏,看不到软件property int dragx: 0 //属性命令要小写字母开头property int dragy: 0property bool isDrag: falseRectangle{radius: 10 //设置主窗口圆角width: parent.widthheight: parent.heightanchors.centerIn: parentgradient:  Gradient{ //设置渐变色,渐变色优先级大于color颜色GradientStop{position: 0 ;color: "#4158d0" }GradientStop{position: 1 ;color: "#c850c0" }orientation: Gradient.Horizontal // 设置方向}//窗口拖动MouseArea{width: parent.widthheight: 100onPressed:{ //鼠标按下root.dragx = mouseX; root.dragy = mouseY;root.isDrag = true}onReleased: root.isDrag = false; //鼠标释放onPositionChanged:{  //位置改变时候if(root.isDrag){
//                    console.log("mouseX = ",mouseX)
//                    console.log("mouseY = ",mouseY)root.x += mouseX - root.dragx //拖动的位置 = 鼠标移动后位置-鼠标按下的位置root.y += mouseY - root.dragy}}}//居中矩阵设置Rectangle{width: 800height: 500anchors.centerIn: parentradius:10 // 设置圆角//插入图片Image{x:57y:100
//                source: "./test.png"  // 必须要添加在资源文件中才能够加载,width,height 可以不设置采用图片的source: "file:///D://C++/C++.png"  //不在资源文件中要使用file:///  D:/可省去}Text { //文本说明:登录系统x: 530y:130width: 120height: 30font.pointSize: 24text: qsTr("登录系统") // 后续可以进行翻译color: "#333333"}//        用户名:usernameTextField{id:usernamex:440y:200width: 300height: 50font.pixelSize: 20placeholderText: "输入用户名"placeholderTextColor: "#999999"color: "#666666"leftPadding: 60background: Rectangle{color: "#e6e6e6"border.color: "#e6e6e6"radius: 25}//用户图标Image{width:20;height: 20x:30;y:15source:username.activeFocus ? "file:///C++\\qml\\ttt\\pic\\tongdaoxinxi-select.png": "file:///C++\\qml\\ttt\\pic\\tongdaoxinxi-unselect.png" //省略D:/ 路径可以用 \\ / //}}//        密码:passwordTextField{placeholderText: "输入密码"id:passwordx:username.xy:username.y + username.height +10width: username.widthheight: username.heightleftPadding: username.leftPaddingfont.pixelSize: username.font.pixelSizeechoMode: TextInput.Password  //设置输入模式为密码,设置后不能输入中文
//                background: username.background //不能用这种方法,会把上面的背景换掉 因为对象只有一份 todobackground: Rectangle{color: username.background.color //颜色复用border.color: username.background.border.colorradius: 25}//密码图标Image{width:20;height: 20x:30;y:15source:password.activeFocus ? "file:///C++\\qml\\ttt\\pic\\wenben-select.png": "file:///C++\\qml\\ttt\\pic\\wenben-unselect.png" //省略D:/ 路径可以用 \\ / //}}//        登录按钮:submitButton{id:submitx:password.xy:password.y +password.height + 10width: password.widthheight: password.heighttext: qsTr("登录")palette.buttonText: "white"  //在本人电脑上测试,虽然qml会报错误:palette没有buttonText属性,但是可以运行font.pixelSize: username.font.pixelSizeonClicked: {
//                    submit.contentItem.color = "red" //这种方法可以改变按钮的颜色,但是在外面改变不了console.log("登录: "+username.text+":"+ password.text)print("登录: ",username.text,":",password.text)}background: Rectangle{radius:25color: {//可以判断状态来设置颜色if(submit.down)return "#00b846"else if(submit.hovered)return "#333333"elsereturn "#57b864"}}}} //中间矩形Rectangle{x:root.width - 35y:5width: 30;height: 30color: "#00000000" //rgba 最后表示透明度Text {id: closetext: qsTr("×")color: "black"font.pixelSize: 28anchors.centerIn: parent}MouseArea{//鼠标区域事件anchors.fill: parenthoverEnabled: true //设置监听鼠标移入事件,默认不开启onEntered: { // 鼠标进入时,parent.color = "#1BFFFFFF"}onExited: parent.color = "#00000000" // 鼠标退出时onPressed: parent.color = "#FF0000"; //鼠标按下时onClicked: root.close() //调用主窗口函数,关闭界面。}}} //主体矩形} //窗口

4.动画事件、控件动态出现、图片转动画

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Window 2.12
import QtGraphicalEffects 1.0  //渐变色需要导入的库
//import QtQuick.Controls.Material 2.12
//import QtQuick.Controls.Universal 2.12/*
1. 核心控件和布局管理和登录事件处理文本说明:登录系统用户名:username密码:password登录按钮:submit登录事件处理onClicked
2.样式优化、背景渐变、图标自动替换3.窗口拖动、去掉原有标题栏、做圆角窗口拖动
4.动画事件、控件动态出现、图片转动画*/
ApplicationWindow{ //窗口visible: truewidth: 1280height: 800title: qsTr("qml简单的登录界面")id:rootcolor: "#00000000" //因为边框圆角的问题,可以设置下透明flags: Qt.Window | Qt.FramelessWindowHint //属性,标题栏隐藏 无框窗口提示,必须要前面的,不然系统桌面菜单栏,看不到软件property int dragx: 0 //属性命令要小写字母开头property int dragy: 0property bool isDrag: falseRectangle{radius: 10 //设置主窗口圆角width: parent.widthheight: parent.heightanchors.centerIn: parentgradient:  Gradient{ //设置渐变色,渐变色优先级大于color颜色GradientStop{position: 0 ;color: "#4158d0" }GradientStop{position: 1 ;color: "#c850c0" }orientation: Gradient.Horizontal // 设置方向}//窗口拖动MouseArea{width: parent.widthheight: 100onPressed:{ //鼠标按下root.dragx = mouseX; root.dragy = mouseY;root.isDrag = true}onReleased: root.isDrag = false; //鼠标释放onPositionChanged:{  //位置改变时候if(root.isDrag){root.x += mouseX - root.dragx //拖动的位置 = 鼠标移动后位置-鼠标按下的位置root.y += mouseY - root.dragy}}}//居中矩阵设置Rectangle{width: 800height: 500anchors.centerIn: parentradius:10 // 设置圆角//插入图片Image{id:imagex:57y:100source: "file:///D://C++/C++.png"  //不在资源文件中要使用file:///  D:/可省去states: [State{name:"rotated"PropertyChanges {target:  imagerotation:180}} ]transitions: Transition {RotationAnimation{duration: 1000direction: RotationAnimation.Counterclockwise}}MouseArea{anchors.fill: parentonClicked: {if(image.state === "rotated"){image.state =""}else{image.state = "rotated"}}}}Text { //文本说明:登录系统x: 530y:130width: 120height: 30font.pointSize: 24text: qsTr("登录系统") // 后续可以进行翻译color: "#333333"}//        用户名:usernameTextField{id:usernamex:440y:200width: 300height: 50font.pixelSize: 20placeholderText: "输入用户名"placeholderTextColor: "#999999"color: "#666666"leftPadding: 60background: Rectangle{color: "#e6e6e6"border.color: "#e6e6e6"radius: 25}//用户图标Image{width:20;height: 20x:30;y:15source:username.activeFocus ? "file:///C++\\qml\\ttt\\pic\\tongdaoxinxi-select.png": "file:///C++\\qml\\ttt\\pic\\tongdaoxinxi-unselect.png" //省略D:/ 路径可以用 \\ / //}//动画效果,在用户名设置,因为QML的属性绑定,密码,登录都会移动.NumberAnimation on y{from: username.y -50to: username.yduration: 300 //500毫秒}}//        密码:passwordTextField{placeholderText: "输入密码"id:passwordx:username.xy:username.y + username.height +10width: username.widthheight: username.heightleftPadding: username.leftPaddingfont.pixelSize: username.font.pixelSizeechoMode: TextInput.Password  //设置输入模式为密码,设置后不能输入中文
//                background: username.background //不能用这种方法,会把上面的背景换掉 因为对象只有一份 todobackground: Rectangle{color: username.background.color //颜色复用border.color: username.background.border.colorradius: 25}//密码图标Image{width:20;height: 20x:30;y:15source:password.activeFocus ? "file:///C++\\qml\\ttt\\pic\\wenben-select.png": "file:///C++\\qml\\ttt\\pic\\wenben-unselect.png" //省略D:/ 路径可以用 \\ / //}}//        登录按钮:submitButton{id:submitx:password.xy:password.y +password.height + 10width: password.widthheight: password.heighttext: qsTr("登录")palette.buttonText: "white"  //在本人电脑上测试,虽然qml会报错误:palette没有buttonText属性,但是可以运行font.pixelSize: username.font.pixelSizeonClicked: {
//                    submit.contentItem.color = "red" //这种方法可以改变按钮的颜色,但是在外面改变不了console.log("登录: "+username.text+":"+ password.text)print("登录: ",username.text,":",password.text)}background: Rectangle{radius:25color: {//可以判断状态来设置颜色if(submit.down)return "#00b846"else if(submit.hovered)return "#333333"elsereturn "#57b864"}}}} //中间矩形Rectangle{x:root.width - 35y:5width: 30;height: 30color: "#00000000" //rgba 最后表示透明度Text {id: closetext: qsTr("×")color: "black"font.pixelSize: 28anchors.centerIn: parent}MouseArea{//鼠标区域事件anchors.fill: parenthoverEnabled: true //设置监听鼠标移入事件,默认不开启onEntered: { // 鼠标进入时,parent.color = "#1BFFFFFF"}onExited: parent.color = "#00000000" // 鼠标退出时onPressed: parent.color = "#FF0000"; //鼠标按下时onClicked: root.close() //调用主窗口函数,关闭界面。}}} //主体矩形} //窗口

在QML中,还可以使用设计工具(Qt Design Studio)去设计窗口(初次接触,有点看不懂) ,位置在:D:\C++\Qt5.15.2\Tools\QtDesignStudio\bin 。根据自己电脑上的QT版本去看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10973.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

字节青训-小F的永久代币卡回本计划、

目录 一、小F的永久代币卡回本计划 问题描述 测试样例 解题思路: 问题理解: 数学公式: 代码实现: 最终代码: 运行结果: 二、构造特定数组的逆序拼接 问题描述 测试样例 解题思路:…

[ Linux 命令基础 4 ] Linux 命令详解-文本处理命令

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

06:(寄存器开发)对上电/复位的SystemInit函数进行分析

SystemInit函数分析 通过第5章的时钟树的学习,基本了解了SystemClock总线,AHB总线,APB1总线,APB2总线的时钟频率。那么单片机一上电或者按下复位时,这些总线的时钟频率是如何变化的喃? 这和STM32的启动文件…

C++ : STL容器(适配器)之stack、queue剖析

STL容器适配器之stack、queue剖析 一、stack、queue的接口(一)stack 接口说明(二)queue 接口说明 二、stack、queue的模拟实现(一)stack、queue是容器适配器stack、queue底层默认容器--deque1、deque概念及…

三菱QD77MS定位模块外部信号选择功能

“外部信号选择功能” 是在使用上/下限限位信号和近点狗信号的情况下,从以下信号中选择的功能。 "QD77MS的外部输入信号 "伺服放大器的外部输入信号 "经由 CPU 的外部输入信号(QD77MS 的缓冲存储器) 经由 CPU 的外部输入信号(QD77MS 的缓冲存储器)的…

Vue3-06_路由

路由 后台路由是根据请求url,匹配请求处理的后台模块(路径) 前台根据访问路径,决定显示的内容。 路由就是: 访问hash 与内容的对应关系 路由的工作方式 用户点击页面的路由链接导致url地址栏中的Hash值发生了变化前…

【知识科普】TCP与UDP这两者之间的对比

TCP与UDP这两者之间的对比 概述TCP 协议的基本概念TCP 协议的工作原理TCP 协议的报文结构TCP 协议的流量控制TCP 协议的可靠性TCP 与 UDP 的比较TCP 协议的应用TCP 协议的优缺点优点缺点 概述 TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的…

初次体验Tauri和Sycamore(1)

原创作者:庄晓立(LIIGO) 原创时间:2024年11月10日 原创链接:https://blog.csdn.net/liigo/article/details/143666827 版权所有,转载请注明出处。 前言 Tauri 2.0发布于2024年10月2日,Sycamore…

基于Spring Boot+Vue的学院食材采供管理系统

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js;UI库:ElementUI; 开发工具&…

【C++】vector模拟实现、迭代器失效问题(超详解)

vector会使用之后我们来模拟实现一下,通过对vector的模拟实现,我们来说一下迭代器失效问题。 1.准备工作 在头文件vector.h里声明和实现函数,然后在test.cpp里测试代码的正确性。 在vector.h中用命名空间分隔一下,因为c库里面也有…

基于SpringBoot的渔具管理系统【附源码】

基于SpringBoot的渔具管理系统 效果如下: 系统主页面 系统登陆页面 管理员主页面 用户管理页面 渔具信息管理页面 租赁信息管理页面 归还信息管理页面 渔具信息页面 用户登陆页面 个人中心页面 研究背景 随着社会的发展,渔具销售企业之间的竞争与合作…

string

文章目录 一. STL1.概念2.版本 二. string类2.1 为什么学习string类2. 标准库中的string类2.2.1 构造(7个)2.2.2 对string类对象进行访问和修改(1)operator[](2)迭代器1.迭代器的使用2.迭代器的价值&#x…

B2B订货系统功能设计与代码开发(PHP + MySQL)

在B2B(Business to Business)电子商务中,企业之间的商品订购、交易和供应链管理是核心功能。一个高效的B2B订货系统可以帮助企业管理库存、订单、采购等业务流程。本文将介绍一个基于PHP与MySQL技术栈的B2B订货系统的功能设计与开发流程。 一…

【2024】前端学习笔记17-Vue初体验

学习笔记 1.什么是vue2.vue初体验3.代码拆分释义4.本文新内容1.什么是vue Vue是一个用于构建用户界面的渐进式JavaScript框架。 它专注于视图层,易于集成或与现有项目结合使用,也可以通过其生态系统实现更复杂的单页应用(SPA)。 Vue的核心特点包括响应式数据绑定、组件化开…

java动态代理

静态代理和动态代理 1、代理模式2、静态代理2.1 定义接口2.2 被代理对象实现2.3 代理对象2.4 客户端 3、JDK动态代理3.1 JDK动态代理例子3.1.1 定义接口3.1.2 被代理对象实现3.1.3 实现InvocationHandler接口3.1.4 创建代理对象 3.2 动态代理底层原理3.3 查看生成的代理类 4、C…

多线程的创建方式以及及Thread类详解

目录 一.线程的创建方法:(重点) 一:继承Thread类 写法一:正常写法 写法二:匿名内部类 二.实现Runnable接口 写法一:正常写法 写法二:匿名内部类 三. 实现 Callable 接口 ​…

408最后冲刺阶段,怎么做题才能考到120+?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 重要性排序如下:真题占据首位,紧随其后的是王道模拟题,王道书与题目则紧随其后,而408统考配套习题(高教版)与之大致相当。 真题,无疑…

如何对接低价又稳定的影视会员渠道?

对接低价折扣影视会员渠道通常涉及到与影视内容提供商或第三方分销商的合作。以下是一些基本步骤和注意事项,帮助你顺利对接这类渠道: 1. 市场调研 了解市场:研究市场上现有的影视会员服务提供商,包括价格、服务、用户反馈等。确…

crond 任务调度 (Linux相关指令:crontab)

相关视频链接 crontab 进行 定时任务 的设置 概述 任务调度:是指系统在某个时间执行的特定的命令或程序 任务调度的分类: 1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等。 2.个别用户可能希望执行某些程序,比如…

顺序表+ArrayList

文章目录 一、基础知识1.1 数据结构类的继承图1.2 List 介绍1.3 线性表 二、数据结构 -- 顺序表2.1 什么是顺序表以及优缺点2.2 用数组实现顺序表细节解析代码 三、ArrayList3.1 Java中如何使用ArrayList3.2 ArrayList源码无参构造方法add方法扩容方法指定初始容量构造利用其他…