SFOS2:常用容器(布局)介绍
一、前言
最近在进行sailfish os的开发,由于在此之前并没有从事过QT开发的工作,所以对这一套颇为生疏,以此记录一下。以下内容不一定完全准确,开发所使用的是Qt Quick 2.6与Sailfish.Silica 1.0两个库。
二、布局
1.Qt Quick 2.6
1.1 Item
- 描述:
Item是所有可视化 QML 对象的基类,它本身没有视觉外观,但可作为容器来包含其他项。 - 示例:
import QtQuick 2.6Item {width: 200height: 200Rectangle {width: 50height: 50color: "red"anchors.centerIn: parent}
}
备注: 可简单理解为安卓安卓开发的View。
1.2 Window(ApplicationWindow)
- 描述:代表一个顶级窗口,通常作为应用程序的主窗口。
- 示例:
import QtQuick 2.6
import QtQuick.Window 2.2Window {visible: truewidth: 640height: 480title: "Window Example"Rectangle {width: 100height: 100color: "blue"anchors.centerIn: parent}
}
备注: sailfish os的开发中,window的应用就是入口qml,指定了这个程序的窗口,这意味着在程序中几乎只有一个window,也就是ApplicationWindow。而对于window这个组件,在windows系统的桌面端开发中,表现是一个窗口,就类似于Java Swing的JFrame。
1.3 Rectangle
- 描述:用于创建矩形区域,可设置颜色、边框等属性,也可作为容器。
- 示例:
import QtQuick 2.6Rectangle {width: 200height: 200color: "green"Text {text: "Inside Rectangle"anchors.centerIn: parent}
}
1.4 Row
- 描述:将子项水平排列,全部在一行。
- 示例:
import QtQuick 2.6Row {spacing: 10Rectangle {width: 50height: 50color: "red"}Rectangle {width: 50height: 50color: "green"}
}
1.5 Column
- 描述:将子项垂直排列,全部在一列。
- 示例:
import QtQuick 2.6Column {spacing: 10Rectangle {width: 50height: 50color: "red"}Rectangle {width: 50height: 50color: "green"}
}
1.6 Grid
- 描述:将子项排列成网格状,多行多列。
- 示例:
import QtQuick 2.6Grid {columns: 2spacing: 10Rectangle {width: 50height: 50color: "red"}Rectangle {width: 50height: 50color: "green"}Rectangle {width: 50height: 50color: "blue"}
}
1.7 Flow
- 描述:按顺序排列子项,当空间不足时自动换行,坦白说就是流式布局。
- 示例:
import QtQuick 2.6Flow {width: 150spacing: 10Rectangle {width: 50height: 50color: "red"}Rectangle {width: 50height: 50color: "green"}Rectangle {width: 50height: 50color: "blue"}
}
1.8 StackLayout
- 描述:将子项堆叠,同一时间只显示一个子项,类似于安卓的卡片布局。
- 示例:
import QtQuick 2.6StackLayout {id: stackwidth: 200height: 200currentIndex: 0Rectangle {color: "red"}Rectangle {color: "green"}Button {text: "Switch"onClicked: stack.currentIndex = (stack.currentIndex + 1) % 2}
}
1.9 AnchorLayout
- 描述:基于锚点来布局子项,就是安卓的约束布局(ConstraintLayout)。
- 示例:
import QtQuick 2.6AnchorLayout {width: 200height: 200Rectangle {id: rect1color: "red"width: 50height: 50anchors.left: parent.leftanchors.top: parent.top}Rectangle {id: rect2color: "green"width: 50height: 50anchors.left: rect1.rightanchors.top: rect1.topanchors.margins: 10}
}
1.10 Flickable
- 描述:提供可滚动的区域,当内容超出区域大小时可通过手势滚动。
- 示例:
import QtQuick 2.6Flickable {width: 200height: 200contentWidth: 400contentHeight: 400Rectangle {width: 400height: 400color: "yellow"}
}
1.11 PathView
- 描述:
PathView能够沿着自定义路径布局和滚动项目,可创建复杂的布局效果,像环形布局等。 - 示例:
import QtQuick 2.6PathView {width: 200height: 200model: 5path: Path {startX: 0; startY: 100PathLine { x: 200; y: 100 }}delegate: Rectangle {width: 20height: 20color: "red"}
}
备注: 简单来讲,就是你有一个路径(path),然后所有的组件都会沿着你的这个路径进行排列。这是很自由的,你甚至可以用一些很小的方块,排列出一个笑脸,只要你能弄出路径。
1.12 delegate
- 描述: delegate是一个模板组件,并不是容器与布局,主要用于克隆其他组件的外形
- 示例:
PathView {width: 200height: 200model: 5path: Path {startX: 0; startY: 100PathLine { x: 200; y: 100 }}delegate: Rectangle {width: 20height: 20color: "red"}
}
备注: 这里的主要逻辑是,根据 model 数据项,来重复生成Rectangle。delegate用来指定重复生成的组件的外形,而重复逻辑本身是由父级决定的,例如ListView、GridView、PathView、Repeater。
1.13 Repeater
- 描述:Repeater 可根据数据模型重复创建项目,通常结合其他布局容器使用,用来批量生成元素。
- 示例:
import QtQuick 2.6Column {Repeater {model: 3delegate: Rectangle {width: 50height: 50color: "green"y: index * 60}}
}
备注: 我认为它算不得布局与容器,他就是一个动态数据生成器,用于快捷生成数据。大概发展史:Qt早期都是静态布局,例如Column,而来为了简化这种重复创建工作,于是 Repeater重复器 诞生了。但是后来大家发现,对于大量的子组件例如几千个,是十分影响性能的,于是ListView、GridView、PathView这些集成了delegate与model的布局诞生了,他们不再依赖Repeater,并且拥有自己独特的动态创建逻辑。例如ListView,只会创建看得见的区域,看不见的不创建1000个组件只有10个可见,只创建这10个。于是造成了现在这种情况,有些布局需要使用Repeater,而有些则不需要,可以直接使用delegate。当然,其实他们的先后与因果关系并没有这么严格,之所以这么说是为了方便理解,因为我觉得不这么解释实在是不太合理。
2.Sailfish.Silica 1.0
2.1 PageStack
- 描述:管理页面栈,支持页面(Page)的推入和弹出操作。
- 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0
import Sailfish.Silica.PageStack 1.0ApplicationWindow {visible: truewidth: 640height: 480title: "PageStack Example"PageStack {initialPage: Component {Page {title: "Home Page"Button {text: "Go to Next Page"onClicked: {pageStack.push(Component {Page {title: "Next Page"}})}}}}}
}
备注: 类似于安卓的FragmentManage,即使用来管理Fragment的。Page类似于安卓的Fragment,Window类似于Activity(但sailfish要求只能有一个window,那就是ApplicationWindow)。
2.2 Page
- 描述:用于创建应用中的页面,通常与
PageStack一起使用。 - 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0
import Sailfish.Silica.PageStack 1.0ApplicationWindow {visible: truewidth: 640height: 480title: "Page Example"PageStack {initialPage: Component {Page {title: "My Page"Label {text: "This is a page"anchors.centerIn: parent}}}}
}
备注: 类似与安卓中的Fragment。
2.3 ListView
- 描述:显示列表数据,支持自定义列表项。
- 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0ListView {width: 200height: 300model: ["Item 1", "Item 2", "Item 3"]delegate: Text {text: modelDatafont.pixelSize: 20color: "black"}
}
备注: 集成了delegate与model的,高性能列表。
2.4 CoverPage
- 描述:用于创建应用的封面页面。
- 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0
import Sailfish.Silica.PageStack 1.0ApplicationWindow {visible: truewidth: 640height: 480title: "CoverPage Example"PageStack {cover: Component {CoverPage {title: "App Cover"Label {text: "This is the cover"anchors.centerIn: parent}}}initialPage: Component {Page {title: "Main Page"}}}
}
2.5 TabView
- 描述:提供选项卡式界面,用于切换不同页面。
- 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0TabView {width: 640height: 480Tab {title: "Tab 1"Label {text: "Content of Tab 1"anchors.centerIn: parent}}Tab {title: "Tab 2"Label {text: "Content of Tab 2"anchors.centerIn: parent}}
}
2.6 ScrollView
- 描述:提供滚动功能,用于显示超出其大小的内容。
- 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0ScrollView {width: 200height: 200contentWidth: 400contentHeight: 400Rectangle {width: 400height: 400color: "lightgray"}
}
2.7 StackedPage
- 描述:与
Page类似,不过能堆叠显示,在PageStack里用于实现多层页面的效果。 - 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0
import Sailfish.Silica.PageStack 1.0ApplicationWindow {visible: truewidth: 640height: 480title: "StackedPage Example"PageStack {initialPage: Component {StackedPage {title: "Stacked Page 1"Button {text: "Go to Stacked Page 2"onClicked: {pageStack.push(Component {StackedPage {title: "Stacked Page 2"}})}}}}}
}
2.8 Deck
- 描述:用于创建卡片式布局,卡片可堆叠或滑动切换,适合实现一些具有交互性的卡片展示界面。
- 示例:
import QtQuick 2.6
import Sailfish.Silica 1.0Deck {width: 200height: 300Rectangle {width: 200height: 300color: "blue"}Rectangle {width: 200height: 300color: "yellow"}
}
相关文章:
SFOS2:常用容器(布局)介绍
一、前言 最近在进行sailfish os的开发,由于在此之前并没有从事过QT开发的工作,所以对这一套颇为生疏,以此记录一下。以下内容不一定完全准确,开发所使用的是Qt Quick 2.6与Sailfish.Silica 1.0两个库。 二、布局 1.Qt Quick 2.…...
C++ 核心进阶
模块九:进一步学习 (指引方向) 目录 标准模板库 (STL) 深入 1.1. std::map (进阶) 1.1.1. 迭代器的更多用法 1.1.2. 自定义比较函数 1.1.3. std::multimap 1.2. std::set (进阶) 1.2.1. 迭代器的更多用法 1.2.2. 自定义比较函数 1.2.3. std::multiset 和 std::un…...
守护进程编程
守护进程编程 1. 守护进程的含义 守护进程的含义: 守护进程(Daemon)是指一种在后台运行的进程,通常不与用户交互,用于执行一些常驻任务,如系统监控、日志管理、定时任务等。它通常在操作系统启动时就被启…...
[特殊字符] MySQL MCP 开发实战:打造智能数据库操作助手
💡 简介:本文详细介绍如何利用MCP(Model-Control-Panel)框架开发MySQL数据库操作工具,使AI助手能够直接执行数据库操作。 📚 目录 引言MCP框架简介项目架构设计开发环境搭建核心代码实现错误处理策略运行和…...
element-ui自定义主题
此处的element-ui为基于vue2.x的 由于https://element.eleme.cn/#/zh-CN/theme/preview(element的主题)报错503, 所以使用https://element.eleme.cn/#/zh-CN/component/custom-theme 自定义主题文档中,在项目中改变scss变量的方…...
windows下使用nginx + waitress 部署django
架构介绍 linux一般采用nginx uwsgi部署django,在Windows下,可以取代uwsgi的选项包括Waitressa、Daphnea、Hypercoma和Gunicorna(通过WSLa 运行)。windows服务器一般采用nginx waitress 部署django,,他们的关系如下 django是WEB应用…...
MySQL-多版本并发控制MVCC
文章目录 一、多版本并发控制MVCC二、undo log(回滚日志)二、已提交读三、可重复读总结 一、多版本并发控制MVCC MVCC是多版本并发控制(Multi-Version Concurrency Control),是MySQL中基于乐观锁理论实现隔离级别的方…...
Sherpa简介
Sherpa 是一个由 K2-FSA 团队 开发的 开源语音处理框架,旨在解决传统语音识别工具(如 Kaldi)在模型部署和跨平台适配中的复杂性问题。它通过整合现代深度学习技术和高效推理引擎,提供了从语音识别、合成到说话人识别的一站式解决方…...
4.15redis点评项目下
--->接redis点评项目上 Redis优化秒杀方案 下单流程为:用户请求nginx--->访问tomcat--->查询优惠券--->判断秒杀库存是否足够--->查询订单--->校验是否是一人一单--->扣减库存--->创建订单 以上流程如果要串行执行耗时会很多,…...
目标检测与分割:深度学习在视觉中的应用
🔍 PART 1:目标检测(Object Detection) 1️⃣ 什么是目标检测? 目标检测是计算机视觉中的一个任务,目标是让模型“在图像中找到物体”,并且判断: 它是什么类别(classif…...
SpringBoot 与 Vue3 实现前后端互联全解析
在当前的互联网时代,前后端分离架构已经成为构建高效、可维护且易于扩展应用系统的主流方式。本文将详细介绍如何利用 SpringBoot 与 Vue3 构建一个前后端分离的项目,展示两者如何通过 RESTful API 实现无缝通信,让读者了解从环境搭建、代码实…...
HEIF、HEIC、JPG 和 PNG是什么?
1. HEIF (High Efficiency Image Format) 定义:HEIF 是一种用于存储单张图像和图像序列(如连拍照片)的图像文件格式。优势:相比传统的图像格式,HEIF 提供了更高的压缩效率和更好的图像质量。压缩算法:HEI…...
第一层、第二层与第三层隧道协议
(本文由deepseek生成,特此声明) 隧道协议是网络通信中用于在不同网络间安全传输数据的关键技术,其工作层次决定了封装方式、功能特性及应用场景。本文将详细介绍物理层(第一层)、数据链路层(第…...
部署qwen2.5-VL-7B
简单串行执行 from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor from qwen_vl_utils import process_vision_info import torch, time, threadingdef llm(model_path,promptNone,imageNone,videoNone,imagesNone,videosNone,max_new_tokens2048,t…...
记录jdk8->jdk17 遇到的坑和解决方案
最近项目在升级jdk8->jdk17 springboot2->springboot3 顺序先升级业务服务,后升级组件服务。跟随迭代开发一起验证功能。 1. 使用parent pom 版本管理 spring相关组件的版本。 组件依赖低版本parent不变。 业务服务依赖高版本parent。 2. 修改maven jdk…...
vue3 uniapp vite 配置之定义指令
动态引入指令 // src/directives/index.js import trim from ./trim;const directives {trim, };export default {install(app) {console.log([✔] 自定义指令插件 install 触发了!);Object.entries(directives).forEach(([key, directive]) > {app.directive(…...
杰弗里·辛顿:深度学习教父
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 杰弗里辛顿:当坚持遇见突破,AI迎来新纪元 一、人物简介 杰弗…...
STM32蓝牙连接Android实现云端数据通信(电机控制-开源)
引言 基于 STM32F103C8T6 最小系统板完成电机控制。这个小项目采用 HAL 库方法实现,通过 CubeMAX 配置相关引脚,步进电机使用 28BYJ-48 (四相五线式步进电机),程序通过蓝牙连接手机 APP 端进行数据收发, OL…...
第一个Qt开发的OpenCV程序
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 下载安装Qt:https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe 下载安装OpenCV:https://opencv.org/releases/ 下载安装CMake:Downl…...
如何编写爬取网络上的视频文件
网络爬虫程序,可以爬取某些网站上的视频,音频,图片或其它文件,然后保存到本地电脑上; 有时在工作中非常有用,那在技术上如何进行爬取文件和保存到本地呢?下面以python语言为例,讲解p…...
TCP 如何在网络 “江湖” 立威建交?
一、特点: (一)面向连接 在进行数据传输之前,TCP 需要在发送方和接收方之间建立一条逻辑连接。这一过程类似于打电话,双方在通话前需要先拨号建立连接。建立连接的过程通过三次握手来完成,确保通信双方都…...
【小白训练日记——2025/4/15】
变化检测常用的性能指标 变化检测(Change Detection)的性能评估依赖于多种指标,每种指标从不同角度衡量模型的准确性。以下是常用的性能指标及其含义: 1. 混淆矩阵(Confusion Matrix) 定义:统…...
交叉熵在机器学习中的应用解析
文章目录 核心概念香农信息量(自信息)熵(Entropy)KL散度(Kullback-Leibler Divergence)交叉熵 在机器学习中的应用作为损失函数对于二分类(Binary Classification):对于多…...
ARM Cortex汇编指令
在ARM架构的MCU开发中,汇编指令集是底层编程的核心。以下是针对Cortex-M系列(如M0/M3/M4/M7/M85)的指令集体系、分类及查询方法的详细说明: 一、指令集体系与核心差异 1. 架构版本与指令集特性 处理器架构指令集特点典型应用场…...
数据结构——二叉树(中)
接上一篇,上一篇主要讲解了关于二叉树的基本知识,也是为了接下来讲解关于堆结构和链式二叉树结构打基础,其实无论是堆结构还是链式二叉树结构,都是二叉树的存储结构,那么今天这一篇主要讲解关于堆结构的实现与应用 堆…...
InnoDB的MVCC实现原理?MVCC如何实现不同事务隔离级别?MVCC优缺点?
概念 InnoDB的MVCC(Multi-Version Concurrency Control)即多版本并发控制,是一种用于处理并发事务的机制。它通过保存数据在不同时间点的多个版本,让不同事务在同一时刻可以看到不同版本的数据,以此来减少锁竞争&…...
UDP目标IP不存在时的发送行为分析
当网络程序使用UDP协议发送数据时,如果目标IP不存在,发送程序的行为取决于网络环境和操作系统的处理机制。以下是详细分析: 1. UDP的无连接特性 UDP是无连接的传输协议,发送方不会预先建立连接,也不会收到对方是否存在…...
WHAT - 动态导入模块遇到版本更新解决方案
文章目录 一、动态导入模块二、常见原因与解决方案1. 模块 URL 错误2. 开发人员发版用户停留在旧页面问题背景解决方案思路1. 监听错误,提示用户刷新2. 使用缓存控制策略:强制刷新3. 动态模块加载失败时兜底4. 使用 import.meta.glob() 或 webpack 的 __…...
02-MySQL 面试题-mk
文章目录 1.mysql 有哪些存储引擎、区别是什么?1.如何定位慢查询?2.SQL语句执行很慢,如何分析?3.索引概念以及索引底层的数据结构4.什么是聚簇索引什么是非聚簇索引?5.知道什么叫覆盖索引嘛 ?6.索引创建原则有哪些?7.什么情况下索引会失效 ?8.谈一谈你对sql的优化的经验…...
#include<bits/stdc++.h>
#include<bits/stdc.h> 是 C 中一个特殊的头文件,其作用如下: 核心作用 包含所有标准库头文件 该头文件会自动引入 C 标准库中的几乎全部头文件(如 <iostream>、<vector>、<algorithm> 等)&…...
