QT之QML从入门到精通(第三章)

news/2024/11/15 0:45:13/

QML-Property

关于属性的设置

MyRectangle.qml

import QtQuick 2.12
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformRectangle {id:borderRectrequired property int myid //必须要初始化再能存在readonly property int myint: 100 //设置只读,外部不能够访问property alias btn_extern:btn //内部控件外部扩展,使外部可以访问 前面是新名字,后面是原始名字property alias btn_id:btn.height//只暴露某一个属性width:30height:30color:"red"property Component myComponent //组件类 //实现动态加载,可以支持组件Loader{id:loadersourceComponent: myComponent}Button{id:btnwidth:100height:100}}

main.qml

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformWindow{width:500height:500title: "Mouse Area"visible: trueproperty  int  myid: 1property  real real:2.3 //没有flot类型要使用realproperty string name: "value" //string也可以赋值为colorproperty color nc: "red"property url myurl: "../../C++.png"property variant myVar :1 //是一个万能的类型什么都可以property list<Rectangle> myList; //数组里面都是RectangleComponent{id:comRectangle{width:40;height:40;}}MyRectangle{myid: 1// myComponent: com //实现组件的动态加载,注意:qml要是调用界面必须要加载qrc文件中。Component.onCompleted: {width =100 //可以赋值,入伙不想要赋值// myint = 100// console.log(width)// console.log(myint)console.log("btn = ",btn_extern.width)}}}

QML-CheckBox

        

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformWindow{width:500height:500title: "Mouse Area"visible: trueButtonGroup{//按钮组id:btngroupexclusive: true //设置排他属性// buttons: col.children //通过布局获取所有的控件是一个list<AbstractButton>方式1}Column //列布局,这里先不讲解,后续统一讲解{id:colCheckBox {checked: true //设置选择状态tristate:true //设置三态按钮autoExclusive: true //CheckBox不存在排他的方法 RadioButton自动存在排他checkable:false //设置可以被选中text: qsTr("First")}CheckBox {text: qsTr("Second")autoExclusive: truecheckable:trueButtonGroup.group: btngroup //方式2设置组}CheckBox {checked: truecheckable:trueautoExclusive: truetext: qsTr("Third")ButtonGroup.group: btngroup //方式2设置组}}}

实现树形勾选框

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformWindow{width:500height:500title: "Mouse Area"visible: trueColumn {ButtonGroup {id: childGroupexclusive: falsecheckState: parentBox.checkState}CheckBox {id: parentBoxtext: qsTr("Parent")checkState: childGroup.checkState}CheckBox {checked: truetext: qsTr("Child 1")leftPadding: indicator.widthButtonGroup.group: childGroup}CheckBox {text: qsTr("Child 2")leftPadding: indicator.widthButtonGroup.group: childGroup}}}

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformWindow{width:500height:500title: "Mouse Area"visible: trueCheckBox {tristate: truenextCheckState: function() { //下次切换的状态,手动管理if (checkState === Qt.Unchecked)return Qt.Checkedelse if(checkState == Qt.Checked)return Qt.PartiallyCheckedelsereturn Qt.Unchecked}}}

QML-Button扩展

DelayButton

    DelayButton{width:150;height: 50delay:300 //持续的时间onProgressChanged: { //进度条改变的事件范围是0-1console.log(progress)}}

RadioButton

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformWindow{width:500height:500title: "Mouse Area"visible: trueColumn{RadioButton{ //可以自动实现排他性checked: truetext:qsTr("radio1")}RadioButton{text:qsTr("radio2")}RadioButton{text:qsTr("radio3")}}}

Switch

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformWindow{width:500height:500title: "Mouse Area"visible: trueButtonGroup{id:groupbuttons: col.children//添加所有成员exclusive: true //设置自动排他}Column{id:colSwitch{ //勾选按钮checked: trueLayoutMirroring.enabled: true//开启镜像效果text:qsTr("radio1")onPositionChanged: {console.log("pos:",position) //输出位置1是开0是关,可以用鼠标去拖动他}}Switch{text:qsTr("radio2")onPositionChanged: {console.log("radio2:",position) //输出位置1是开0是关}}}}

TabBar

 ButtonGroup{id:groupbuttons: col.children//添加所有成员exclusive: true //设置自动排他}TabBar{id:colTabButton{ //tab框自带排他性checked: truetext:qsTr("radio1")}TabButton{text:qsTr("radio2")}}

RoundButton

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as PlatformWindow{width:500height:500title: "Mouse Area"visible: trueButtonGroup{id:groupbuttons: col.children//添加所有成员exclusive: true //设置自动排他}RoundButton{//半圆形按钮,因为Button没有radius属性,需要设置background为rectangle设置x:1radius: 10text:qsTr("radio1")}RoundButton{x:150text:qsTr("radio2")}}

ToolButton

工具按钮

import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as Platform
import QtQuick.Layouts 1.15Window{width:500height:500title: "Mouse Area"visible :trueToolBar {RowLayout {anchors.fill: parentToolButton {text: qsTr("‹")onClicked: stack.pop()}Label {text: "Title"elide: Label.ElideRighthorizontalAlignment: Qt.AlignHCenterverticalAlignment: Qt.AlignVCenterLayout.fillWidth: true}ToolButton {text: qsTr("⋮")onClicked: menu.open()}}}}

 自定义按钮控件

    Button{id:btnwidth: 150height: 100background: Rectangle{anchors.fill: parentcolor: btn.checked | btn.down ?"blue":"black" //选中或者按下就走三目运算符}}

    Button{id:btntext: qsTr("btn")width: 150height: 100contentItem: Text{ //内容重新绘制text:btn.textfont:btn.font// verticalAlignment:Text.horizontalAlignmentverticalAlignment: Text.horizontalCenter}}
import QtQuick 2.12 //2.15
import QtQuick.Window 2.12 //2.15
import QtQuick.Controls 2.12 //可以引入别的控件
import Qt.labs.folderlistmodel 2.12
import Qt.labs.platform 1.0 as Platform
import QtQuick.Layouts 1.15Window{width:500height:500title: "Mouse Area"visible :trueButton{id:btntext: qsTr("btn")width: 150height: 100contentItem: Rectangle{ //内容重新绘制Text{id:txttext:btn.textfont:btn.fontanchors.right: parent.right//靠右显示// verticalAlignment:Text.horizontalAlignment}Image {id: imagewidth: 50;height: 50source: "../../C++.png"// anchors.centerIn: parent//设置居中}}background:Rectangle{ //如果都存在background可以设置边框的颜色anchors.fill: btncolor: "red"}}}


http://www.ppmy.cn/news/1527519.html

相关文章

【FastAPI】实现服务器向客户端发送SSE(Server-Sent Events)广播

在FastAPI中实现服务器向客户端发送SSE&#xff08;Server-Sent Events&#xff09;广播&#xff0c;可以通过以下步骤实现。SSE是一种服务器推送技术&#xff0c;允许服务器发送实时数据到客户端&#xff0c;通常用于创建实时更新的应用程序。 1. 安装必要的依赖 首先&#…

python函数一:函数的概念、函数定义与调用、函数的参数、函数的返回值、说明文档以及函数的嵌套调用

文章目录 1. 函数介绍1.1 函数的概念1.2 函数定义与调用1.2 函数的参数1.3 函数的返回值1.4 说明文档 2. 函数的嵌套调用2.1 嵌套调用及执行流程2.2 嵌套调用的应用 1. 函数介绍 1.1 函数的概念 什么是函数&#xff1f; 函数:是一个被命名的、独立的、完成特定功能的代码段&am…

【爬虫软件】批量采集抖音主页已发布作品

一、背景介绍 以下xx代表你猜中的部分。 1.1 爬取目标 用python开发的xx爬虫采集软件&#xff0c;可自动按博主抓取其已发布视频。 为什么有了源码还开发界面软件呢&#xff1f;方便不懂编程代码的小白用户使用&#xff0c;无需安装python&#xff0c;无需改代码&#xff0c;…

el-input设置type=‘number‘和v-model.number的区别

el-input设置typenumber’与设置.number修饰符的区别 1. 设置type‘number’ 使用el-input时想收集数字类型的数据&#xff0c;我们首先会想到typenumber&#xff0c;设置完type为number时会限制我们输入的内容只能为数字&#xff0c;不能为字符/汉字等非数字类型的数值&…

大数据处理技术:分布式文件系统HDFS

目录 1 实验名称&#xff1a; 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 HDFS的基本操作 5.2 HDFS-JAVA接口之读取文件 5.3 HDFS-JAVA接口之上传文件 5.4 HDFS-JAVA接口之删除文件 6 实验结果 6.1 HDFS的基本操作 6.2 HDFS-JAVA接口之读取文件 6.…

php变量赋值javascipt变量

javascript变量可以通过document.getElementById()获取html变量值php变量 可以在不同php脚本中使用&#xff0c;最后一次使用变量的初始值位为上一次使用变量的值 <!DOCTYPE html> <html> <body><?php $a "Hello World!"; echo $a; ?> …

Java入门程序-HelloWorld

Java程序开发的三个步骤 1.编写代码得到 .java 源代码文件 2.使用javac编译得到 .class 字节码文件 3.使用java运行 注意事项 建议代码文件名全英文&#xff0c;首字母大写&#xff0c;满足驼峰命名法&#xff0c;源代码文件的后缀必须是.java 开发HelloWorld程序 &…

网络基础,协议,OSI分层,TCP/IP模型

网络的产生是数据交流的必然趋势&#xff0c;计算机之间的独立的个体&#xff0c;想要进行数据交互&#xff0c;一开始是使用磁盘进行数据拷贝&#xff0c;可是这样的数据拷贝效率很低&#xff0c;于是网络交互便出现了&#xff1b; 1.网络是什么 网络&#xff0c;顾名思义是…