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

embedded/2024/11/23 15:54:28/

布局使用

Column控件的使用

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Column{ //列布局id:colspacing: 10 //控件间距Repeater{ //使控件重复id:rep
//            model: 3  //控制数量或者数据model:ListModel{}Button{width: 100height: 50
//                text: "btn"+indextext: name //name是从按钮点击的时候拿到的name}}move: Transition {// 移动时候弹跳NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }}add: Transition { //添加时候弹跳NumberAnimation { properties: "x,y"; easing.type: Easing.OutBounce }}populate: Transition { //从控件创建的时候 200坐标移动到当前左边的动画NumberAnimation { properties: "x,y"; from: 200; duration: 1000; easing.type: Easing.OutBounce }}}Button{anchors.bottom:parent.bottomanchors.bottomMargin: 20onClicked: {rep.model.insert(0,{"name":rep.model.count})}}
}

Row控件的使用

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Rectangle{width: 400height: 300border.color: "black"Row{ //行布局,默认是从左往右进行绘制的。id:colspacing: 10 //控件间距leftPadding: 40 //距离左边40像素topPadding: 40 //距离上面40像素layoutDirection: Qt.RightToLeft //设置从右往左绘制Repeater{ //使控件重复id:repmodel: 3  //控制数量或者数据//            model:ListModel{//            }Button{width: 100height: 50text: "btn"+index}}Component.onCompleted: {console.log(effectiveLayoutDirection) //显示是否有镜像}}}}

Flow控件的使用

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Rectangle{width: 300height: 200border.color: "black"Flow { //根据父控件的大小去调整自己的布局,流式布局flow:Flow.TopToBottom //默认从左往右  ,设置之后是从上到下绘制。anchors.fill: parentanchors.margins: 4spacing: 10Text { text: "Text"; font.pixelSize: 40 }Text { text: "items"; font.pixelSize: 40 }Text { text: "flowing"; font.pixelSize: 40 }Text { text: "inside"; font.pixelSize: 40 }Text { text: "a"; font.pixelSize: 40 }Text { text: "Flow"; font.pixelSize: 40 }Text { text: "item"; font.pixelSize: 40 }}}}

Gird控件使用

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Rectangle{width: 300height: 200border.color: "black"Grid {topPadding: 20
//            columns: 3 //指定有3列rows: 2 //指定有2行spacing: 2Rectangle { color: "red"; width: 50; height: 50 }Rectangle { color: "green"; width: 20; height: 50 }Rectangle { color: "blue"; width: 50; height: 20 }Rectangle { color: "cyan"; width: 50; height: 50 }Rectangle { color: "magenta"; width: 10; height: 10 }}}
}

自定义Grid控件

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtGraphicalEffects 1.0Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Grid {visible: falseid:gridcolumns: 3width: 15height: 300x:200y:100Repeater{model:grid.width/5 * 200/5
//                model:grid.width/5 * grid.height /5Rectangle{width: 5;height: 5color: index%2?"black":"white"}}}Rectangle{id:retwidth: grid.widthheight: grid.heightradius: 10border.color: "black"}Rectangle{id:bor_retwidth: grid.width+4height: grid.height+4
//        anchors.horizontalCenter: parent.horizontalCenter
//        anchors.bottom: parent.bottomborder.color: "black"radius: 10border.width: 3
//        OpacityMask:{ //制作阴影效果,12版本没有,哭了,这qml真难学
//            source :grid
//            maskSource:ret
//            anchors.fill:parent
//            anchors.margins:2
//        }}Button{id:btnx:100width: 50height: 50onClicked: {
//            bor_ret.height-= 10grid.height -= 10 //点击-10,会导致不断绘制,可以改变grid的高度}}}

访问复杂组件的子项

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{id:windowwidth:800height:600title: ""visible :trueColumn{id:colRepeater{id:repmodel:3Button{id:btny:index*60text: "btn"+index}}Text {id: txttext: qsTr("text")}Rectangle{id:rectwidth: 100height: 20color: "black"}}Button{id:btn2x:200width: 100height: 50text: "click"onClicked: {console.log("length = ",col.children.length) //虽然是5个控件,但是界面上Repeater也是一个控件。for(var i=0;i<col.children.length ;i++){if(col.children[i] instanceof Button){console.log(col.children[i].text)}
//                console.log(col.children[i] instanceof Button )  //判断是否是这个对象的实例。}}}}
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{id:windowwidth:800height:600title: ""visible :trueListView{id:listwidth: 100height: 300model: ['张三','李四',"王五"]delegate: Text{   //绘制 控制单个 项id:txttext: modelData}}Button{id:btnx:200width: 100height: 50onClicked: {var len = list.contentItem.children.length //访问内部控件console.log(len)for(var i=0;i<len;i++ ){console.log(list.contentItem.children[i])}}}
}
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{id:windowwidth:800height:600title: ""visible :trueListView{id:listwidth: 100height: 300model: ['张三','李四',"王五"]delegate: Column{Text{id:txttext: modelData}Button{id:btn1text: "btn"+index}}}Button{id:btnx:200width: 100height: 50onClicked: {var len = list.contentItem.children.length //访问内部控件console.log(len)for(var i=0;i<len;i++ ){var col =  list.contentItem.children[i];console.log(col.children.length)for(var j=0;j< col.children.length;j++){console.log(col.children[j])}}}}
}


http://www.ppmy.cn/embedded/139878.html

相关文章

GRU (门控循环单元 - 基于RNN - 简化LSTM又快又好 - 体现注意力的思想) + 代码实现 —— 笔记3.5《动手学深度学习》

目录 0. 前言 1. 门控隐状态 1.1 重置门和更新门 1.2 候选隐状态 1.3 隐状态 2. 从零开始实现 2.1 初始化模型参数 2.2 定义模型 2.3 训练与预测 3 简洁实现 4. 小结 0. 前言 课程全部代码&#xff08;pytorch版&#xff09;已上传到附件看懂上一篇RNN的所有细节&am…

飞桨大模型PaddleOCR

一、新建项目PaddleOCRProject 二、查看开源 pip install paddlepaddle pip install paddleocr指定镜像源下载才快&#xff1a; pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddleocr -i https://pypi.tuna.tsinghua.edu.cn/simple 三…

基于Java Springboot高校本科生学习成长记录系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

Flutter:AnimatedContainer实现导航侧边栏

导航侧边栏 import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({Key? key}):super(key: key);overrideWidget build(BuildContext context) {return const MaterialApp(title: Flutter Demo,home…

PHP 高并发解决方案

PHP作为一种脚本语言&#xff0c;在处理高并发请求时可能面临一些挑战。但通过合理的设计和优化&#xff0c;可以有效提升PHP应用程序的性能和并发处理的能力。 一、缓存 页面缓存&#xff1a;将生成的页面缓存起来&#xff0c;减少对数据库的查询&#xff0c;提高响应速度。…

【网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析2

文章目录 一、准备阶段二、创建RAID6阵列三、格式化RAID阵列四、挂载RAID阵列五、配置自动挂载&#xff08;可选&#xff09;六、验证RAID6配置注意事项 基于软RAID实现RAID6配置通常涉及在操作系统级别上使用特定的软件工具来创建和管理RAID阵列。在CentOS Stream 9中&#xf…

【Vue3组件通信方法】

文章目录 组件通信概述父子组件通信子父组件通信兄弟组件通信跨级组件通信 组件通信概述 在Vue中&#xff0c;组件通信是指不同组件之间如何传递数据、触发事件以及共享状态的过程。Vue的组件通信可以分为以下几种方式&#xff1a; 父子组件通信&#xff1a;父组件向子组件传递…

玩转合宙Luat教程 基础篇④——程序基础(库、线程、定时器和订阅/发布)

文章目录 一、前言二、库三、线程四、定时器五、订阅/发布5.1 回调函数5.2 堵塞等待一、前言 教程目录大纲请查阅:玩转合宙Luat教程——导读 写一写Lua程序基础的东西。 包括如何调用库,如何创建线程、如何创建定时器,如何使用订阅/发布事件。 二、库 程序从main.lua开始通…