QML 入门

QML 入门

    • Qt 基本模块
    • Qt Quick 开发所需基本技术
    • QML 基本语法
    • QML 数据类型
      • 基本数据类型(39)
        • bool
        • color 颜色类型
        • coordinate 坐标类型
        • date 日期时间类型
        • double
        • enumeration 枚举类型
        • font 字体类型
        • geocircle 几何圆数据类型
        • geopath 几何路径数据类型
        • geopolygon 几何多边形类型,少于三个点的多边形是非法的
        • georectangle 几何矩形类型
        • geoshape 几何形状类型
        • int
        • list 列表类型
        • matrix4x4 矩阵类型
        • palette 调色版
        • point 二维点数据类型
        • quaternion 四元数类型
        • real 浮点型
        • rect 矩形区域类型
        • size 大小类型
        • string 字符串类型
        • url 路径类型
        • var 自动类型
        • variant 和var类型类似
        • vector2d 二维向量
      • QML基础对象类型
        • Accessible 给Item提供访问信息,主要用于屏幕阅读器
        • AnchorChanges
        • AnimatedImage 显示动图
        • AnimatedSprite 动画精灵
        • Animation 所有动画的基类
          • AnchorAnimation 改变锚布局时提供动画
          • Animator 是一种特殊类型的动画
          • PathAnimation 路径动画
          • PauseAnimation 暂停动画
          • PropertyAction
          • PropertyAnimation 属性动画
          • ScriptAction 脚本执行
          • SequentialAnimation 顺序动画组
          • AnimationController 动画控制器
          • Animator 高级动画类型
          • Behavior 行为动画
        • BorderImage 带边框的图片
        • BorderImageMesh 一种用于ShaderEffect的图片控件
        • Canvas 画布控件
        • CanvasGradient 设置渐变色
        • Column 列定位器
        • Context2D 2维上下文
        • DoubleValidator(Validator 验证器)
        • Drag 拖拽控件
        • Flickable 可以鼠标拂动的控件
        • Flipable 可翻转的控件
        • Flow 漂浮布局
        • FocusScope
        • FontLoader 字体加载器
        • FontMetrics 字体度量器
        • Gradient 颜色梯度值
        • GraphicsInfo 渲染信息控件([附加属性](https://doc.qt.io/qt-5/qtqml-referenceexamples-attached-example.html))
          • Grid 格子定位器
        • GridMesh 网格点生成器
        • HoverHandler 鼠标和手势处理控件
        • Image 图片显示控件
        • Item
        • ItemGrabResult
      • 对象类型
    • 创建一个QtQuick工程
    • QML 信号槽
    • QML 枚举的使用
    • QML 动态加载控件
    • QML导入js文件
    • c++和QML 交互
      • 使用C++属性和导入QML类型
        • 在QML中使用C++属性、函数和信号
        • 注册QML类型
    • QML 中的模型视图代理
    • 数据存储
    • QML 中的Scene Graph
    • QML 插件

Qt 基本模块

Qt 基本模块

Qt Quick 开发所需基本技术

  1. QML 语言(Qt Meta-Object Language)
  2. JavaScript 语言
  3. Qt C++

QML 基本语法

下面代码展示了QML的基本语法

 Rectangle {id: photo                                               // id on the first line makes it easy to find an objectproperty bool thumbnail: false                          // property declarationsproperty alias image: photoImage.sourcesignal clicked                                          // signal declarationsfunction doSomething(x)                                 // javascript functions{return x + photoImage.width}color: "gray"                                           // object propertiesx: 20                                                   // try to group related properties togethery: 20height: 150width: {                                                // large bindingsif (photoImage.width > 200) {photoImage.width;} else {200;}}Rectangle {                                             // child objectsid: borderanchors.centerIn: parent; color: "white"Image {id: photoImageanchors.centerIn: parent}}states: State {                                         // statesname: "selected"PropertyChanges { target: border; color: "red" }}transitions: Transition {                               // transitionsfrom: ""to: "selected"ColorAnimation { target: border; duration: 200 }}} 

QML中声明一个控件的格式如下:
控件名{
id:标实ID
属性:“”
function 函数名(参数1,参数2,…){}
子控件{}

}

QML 中所有控件都继承自Item控件,查看Qt帮助文档可以查看基本控件的属性和方法。:表示属性绑定,属性可以和某个常量,变量甚至函数绑定。函数的声明、表达式、条件语句的使用和js相同。
一般自定义控件的编码规范都按照上述规则,编写顺序为

  • id
  • property declarations
  • signal declarations
  • JavaScript functions
  • object properties
  • child objects
  • states
  • transitions

QML 数据类型

基本数据类型(39)

bool

color 颜色类型

  • 表示形式有两种:

    • SVG 颜色名称。如:“red” ,“green”
    • 十六进制(三组或四组)。如: “#FF0000” “#800000FF”
      QML 代码示例:
    Rectangle {color: "steelblue"width: 40; height: 40
    }
    Rectangle {color: "transparent"y: 40; width: 40; height: 40
    }
    Rectangle {color: "#FF0000"y: 80; width: 40; height: 40
    }
    Rectangle {color: "#800000FF"y: 120; width: 40; height: 40
    }
    Rectangle {color: "#00000000"    // ARGB fully transparenty: 160width: 40; height: 40
    }
    
  • 方法如下:

    • Qt.rgba() :
     color rgba(real red, real green, real blue, real alpha)
    
    • Qt.hsva():
     color hsva(real hue, real saturation, real value, real alpha)
    
    • Qt.hsla()
    color hsla(real hue, real saturation, real lightness, real alpha)
    
    • Qt.darker() 将基础加深。将RGB转为HSV,将V值乘以factor,然后转到RGB,factor默认值2.0
     color darker(color baseColor, real factor)
    
    • Qt.lighter() 将基础颜色变浅,factor默认值1.5
    color lighter(color baseColor, real factor)
    
    • Qt.tint() 给基础颜色设置一个色调
    color tint(color baseColor, color tintColor)
    

    QML 代码示例:

    		Item {Rectangle {x: 0; width: 80; height: 80color: "lightsteelblue"}Rectangle {x: 100; width: 80; height: 80color: Qt.tint("lightsteelblue", "#10FF0000")}}
    

    在这里插入图片描述

coordinate 坐标类型

该类型和QGeoCoordinate类型对应,表示地球表面的几何位置。有维度(latitude)、经度(longitude)和海拔(altitude)组成。
维度:[-90,90] 经度:[-180,180]
QML 代码示例:
javascript import QtPositioning 5.2 Location { coordinate: QtPositioning.coordinate(-27.5, 153.1) }
+ 属性
* real latitude
* real longitude
* real altitude
* bool isValid
+ 方法
* real distanceTo(coordinate other)
* real azimuth(coordinate other) //方位角
* atDistanceAndAzimuth()

date 日期时间类型

c++ 类型的[QDate](https://doc.qt.io/qt-5/qdate.html)、[QDateTime](https://doc.qt.io/qt-5/qdatetime.html)以及Javascript Date Object都可与之自动相互转换。该类型为QML 基本数据类型,会自动转换为[Date](https://doc.qt.io/qt-5/qml-qtqml-date.html)对象。
格式化函数[Qt.formatDate()](https://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDate-method) 和[Qt.formatDateTime()](https://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDateTime-method)返回日期时间的格式化后的字符串。格式化详见函数链接。*QML 示例代码*
```javascriptvar dateTime = new Date(2001, 5, 2, 14, 13, 09)console.log(Qt.formatDateTime(dateTime,"dd.MM.yyyy"))console.log(Qt.formatDateTime(dateTime,"ddd dd MM yyyy hh:mm::ss::zzz ap"))console.log(Qt.formatDateTime(dateTime,"dddd d MMM yy hh:mm::ss::zzz AP t"))console.log(Qt.formatDateTime(dateTime,"dddd d MMMM yy hh:mm::ss::zzz t"))>>
qml: 02.06.2001
qml: 周六 02 06 2001 02:13::09::000 下午
qml: 星期六 2 6月 01 02:13::09::000 下午 中国标准时间
qml: 星期六 2 六月 01 14:13::09::000 中国标准时间
```

double

enumeration 枚举类型

该数据类型总是以<Type>.<value>这种形式呈现。比如Text.AlignRight。在与c++集成时,请注意,从c++传递到QML的任何枚举值都会自动转换为enumeration,反之亦然。

*QML 示例代码*
```javascriptimport QtQuick 2.0Item {// refer to Text.AlignRight using an int typeproperty int enumValue: textItem.horizontalAlignmentsignal valueEmitted(int someValue)Text {id: textItemhorizontalAlignment: Text.AlignRight}// emit valueEmitted() signal, which expects an int, with Text.AlignRightComponent.onCompleted: valueEmitted(Text.AlignRight)}
```
枚举类型可以是QML 自带类型、在QML中自定义类型或者C++导入的类型,详情见枚举属性[Enumeration Attributes](https://doc.qt.io/qt-5/qtqml-syntax-objectattributes.html#enumeration-attributes)

font 字体类型

经常使用的属性:
- *string* font.**family**   字体
- *bool* font.**bold**  加粗
- *bool* font.**italic** 斜体
- *bool* font.**underline** 下划线
- *real* font.**pointSize**  点大小
- *int* font.**pixelSize**	 像素大小
如果**pixSize** 和 **pointSize** 都指定了,那么将使用**pixelSize**的值
其他属性:
- *enumeration* font.**weight**  粗细
- *bool* font.**overline** 上划线
- *bool* font.**strikeout** 删除线
- *enumeration* font.**capitalization** 大小写
- *real* font.**letterSpacing** 字符间距
- *real* font.**wordSpacing**  单词间距
- *bool* font.**kerning** 是否突起
- *bool* font.**preferShaping**
- *enumeration* font.**hintingPreference**
  • string font.styleName

geocircle 几何圆数据类型

用一个中心点和半径表示,和c++ Qt中的QGeoCircle类型对应。
属性:

  • center : coordinate //中心点,经纬度坐标类型

  • radius : real //半径
    QML 示例代码

    	import QtQuick.Window 2.12import QtPositioning 5.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Item {property variant region: QtPositioning.circle(QtPositioning.coordinate(-27.5, 153.1), 1000)Component.onCompleted:{console.log(region,region.center,region.radius)console.log(QtPositioning.coordinate(0, -153.1))}}}>>qml: QGeoCircle({-27.5, 153.1}, 1000) 27° 30' 0.0" S, 153° 6' 0.0" E 1000>>qml: 0° 0' 0.0", 153° 6' 0.0" W
    

geopath 几何路径数据类型

用一个列表path表示路径中的所有坐标点和c++ Qt中的QGeoPath类型对应。
属性:
- path : const QVariantList // const QList
- width : qreal
QML 示例代码

	import QtQuick 2.12import QtQuick.Window 2.12import QtPositioning 5.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Item {property variant region: QtPositioning.path([QtPositioning.coordinate(2.5, 153.1),QtPositioning.coordinate(-7.5, 13.1),QtPositioning.coordinate(-27.5, 153.1)],3)Component.onCompleted:{console.log(region)console.log(region.path)console.log(region.width)}}}qml: QGeoPath([ 2° 30' 0.0" N, 153° 6' 0.0" E,7° 30' 0.0" S, 13° 6' 0.0" E,27° 30' 0.0" S, 153° 6' 0.0" E, ])qml: [2° 30' 0.0" N, 153° 6' 0.0" E,7° 30' 0.0" S, 13° 6' 0.0" E,27° 30' 0.0" S, 153° 6' 0.0" E]qml: 3

geopolygon 几何多边形类型,少于三个点的多边形是非法的

	帮助文档中显示属性不可以,经测试geopolygon的所有顶点用perimeter属性。*QML 示例代码*```javascriptimport QtQuick 2.12import QtQuick.Window 2.12import QtPositioning 5.2Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Item {property variant region: QtPositioning.polygon([QtPositioning.coordinate(2.5, 153.1),QtPositioning.coordinate(-7.5, 13.1),QtPositioning.coordinate(-27.5, 153.1)])Component.onCompleted:{console.log(region)console.log(region.type)console.log(region.perimeter)}}}}>>qml: QGeoPolygon([ 2° 30' 0.0" N, 153° 6' 0.0" E,7° 30' 0.0" S, 13° 6' 0.0" E,27° 30' 0.0" S, 153° 6' 0.0" E, ])qml: 4qml: [2° 30' 0.0" N, 153° 6' 0.0" E,7° 30' 0.0" S, 13° 6' 0.0" E,27° 30' 0.0" S, 153° 6' 0.0" E]
```

georectangle 几何矩形类型

geoshape 几何形状类型

上述的几何类型都是geoshape的子类型,上述的每个类型具有geoshape的属性和方法
另外,几何数据类型都用QtPositioning创建。
geoshape的属性有
- bool **isEmpty** 是否是空的- bool **isValid** 是否是合法的
- ShapeType **type** 类型 (前面介绍的几何类型的一种)- GeoShape.UnknownType - GeoShape.RectangleType - GeoShape.CircleType - GeoShape.PathType  (Since Qt 5.9)- GeoShape.PolygonType (Since Qt 5.10)

注意有些类型的方法或者属性在帮助文档中有明确定义,但是使用时仍未定义(bug),此时可采用Qt creator的调试模式,看看这个对象具有哪些方法和属性

int

list 列表类型

使用方法和javascript的数组类型,和c++中的[QQmlListProperty](https://doc.qt.io/qt-5/qqmllistproperty.html)类型可自动相互转换 
创建:[]
长度属性:length
添加:push()

matrix4x4 矩阵类型

*QML 示例代码*
```javascript
var a = Qt.matrix4x4(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
var b = Qt.matrix4x4(4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19);
var c = a.times(b);
console.log(c.toString());
// QMatrix4x4(120, 130, 140, 150, 280, 306, 332, 358, 440, 482,
//524, 566, 600, 658, 716, 774)
···matrix4x4  方法如下:
- *toString*()    //用于打印矩阵
- matrix4x4 ***times***(matrix4x4 other)  	//矩阵相乘
- vector4d ***times***(vector4d vector)   	//矩阵乘以向量
- matrix4x4 ***times***(real factor)          	//矩阵乘以标量
- matrix4x4 ***plus***(matrix4x4 other)   	//矩阵相加
- matrix4x4 ***minus***(matrix4x4 other)   //矩阵相减
- vector4d ***row***(int which)                   //返回某一行
- vector4d ***column***(int which)             //返回某一列
- real ***determinant***()                           //返回矩阵的行列式
- matrix4x4 ***inverted***()                        //矩阵的逆矩阵
- matrix4x4 ***transposed***()                   //矩阵的转置矩阵
- bool ***fuzzyEquals***(matrix4x4 other, real epsilon)   //判断两个矩阵是否近似相等,(如果两个矩阵中的每个对应元素的误差都在epsilon范围之内,就认为是近似相等)
- 

palette 调色版

使用调色板可以设置窗口的前景色和背景色,按钮的背景色和字体颜色,简单场景可使用。
使用palette:Control::palette, Popup::palette, ApplicationWindow::palette

point 二维点数据类型

   和Qt C++ 中的QPoint 或 QPointF 可相互转换。使用如:var pos = Qt.point(0, 20)

quaternion 四元数类型

	提供的属性有:***scalar x y z*** 该类型和Qt C++中的[QQuaternion](https://doc.qt.io/qt-5/qquaternion.html)对应,做复杂的旋转缩放建议在c++中使用QQuaternion。该数据类型需要对四元数的定义进行深入了解。

real 浮点型

rect 矩形区域类型

  提供的属性有:***x y width height***  如:var rigion = Qt.rect(50, 50, 100, 100)

size 大小类型

  提供的属性有:***width height***  如:var size = Qt.size(150, 50)

string 字符串类型

  提供的属性有:***length***  ,提供的属性很少,仅用于显示文本和传递字符串,对字符串的高级处理需要在c++端使用QString

url 路径类型

 该类型和Qt c++中的QUrl数据类型对应。对于url类型的属性,输入的字符串和url不能进行比较,因为两者类型不同,且url.toString()和其值也不相同。看官网示例代码:
 Image {source: "pics/logo.png"Component.onCompleted: {// This prints 'false'. Although "pics/logo.png" was the input string,// it's been converted from a string to a URL, so these two are not the same.console.log(source == "pics/logo.png")// This prints 'true' as Qt.resovledUrl() converts the string into a// URL with the correctly resolved pathconsole.log(source == Qt.resolvedUrl("pics/logo.png"))// This prints the absolute path, e.g. "file:///path/to/pics/logo.png"console.log(source.toString())}
}

var 自动类型

variant 和var类型类似

vector2d 二维向量

	向量类型都提供了两个向量的 ***加法 减法 点乘 对应元素相乘 乘以标量 近似相等*** [接口](https://doc.qt.io/qt-5/qml-vector2d.html)。

以下内容可查看官方文档
vector3d 三维向量
vector4d 四维向量
Binding
Component
Connections
Date
Locale
Number
Qt
QtObject
String
Timer

QML基础对象类型

Accessible 给Item提供访问信息,主要用于屏幕阅读器

AnchorChanges

在状态state数组中使用,用于改变锚布局,但是锚布局的间隔需要使用PropertyChanges设置,如果需要对 AnchorsChanges 添加动画,必须使用 AnchorAnimationAnchorChanges 官方示例代码如下:

import QtQuick 2.0Rectangle {id: windowwidth: 120; height: 120color: "black"Rectangle { id: myRect; width: 50; height: 50; color: "red" }states: State {name: "reanchored"AnchorChanges {target: myRectanchors.top: window.topanchors.bottom: window.bottom}PropertyChanges {target: myRectanchors.topMargin: 10anchors.bottomMargin: 10}}MouseArea { anchors.fill: parent; onClicked: window.state = "reanchored" }
}

AnimatedImage 显示动图

AnimatedSprite 动画精灵

可以将一张图片分割成几部分进行循环播放

Animation 所有动画的基类

官方给出了各种动画示例代码

属性:

  • alwaysRunToEnd : bool 该值为true表示,停止动画时(比如调用stop() 或者设置running 为false),该动画会继续执行完当前一次循环。
  • loops : int 循环次数 一直循环,设置该值为Animation.Infinite
  • paused : bool 暂停属性,暂停后不会影响running的属性值。 示例:true - > false -> true === 暂停 -> 继续->暂停 。
  • running : bool 是否正在执行属性 示例:true - > false -> true === 暂停 -> 继续->暂停

信号:

  • finished() :动画正常结束时会发送该信号,设置running = false,不会触发该信号,除了loop 设置Animation.Infinite的情况。只对顶级独立动画有用。
  • started() :动画启动时发送该信号
  • stopped() :停止时发送该信号,

方法:

		ShaderEffect {id: shaderwidth: 200height: 200property variant t;UniformAnimator {target: shaderuniform: "t"from: 0to: 1duration: 1000running: trueloops: Animation.Infinite}fragmentShader:"uniform lowp float t;varying highp vec2 qt_TexCoord0;void main() {lowp float c = qt_TexCoord0.y;gl_FragColor = vec4(0, 0, c * t, 1);}"}```效果图:![在这里插入图片描述](https://img-blog.csdnimg.cn/20201211160417491.gif)3. **ParallelAnimation**  并行动画,该动画中可以包含多个动画,这些动画同时触发。4. **ParentAnimation** 父节点改变动画。搭配ParentChange使用。官方示例代码如下:```javascriptimport QtQuick 2.0Item {width: 200; height: 100Rectangle {id: redRectwidth: 100; height: 100color: "red"}Rectangle {id: blueRectx: redRect.widthwidth: 50; height: 50color: "blue"states: State {name: "reparented"ParentChange { target: blueRect; parent: redRect; x: 10; y: 10 }}transitions: Transition {ParentAnimation {NumberAnimation { properties: "x,y"; duration: 1000 }}}MouseArea { anchors.fill: parent; onClicked: blueRect.state = "reparented" }}}
PathAnimation 路径动画

将目标Item沿着路径path移动。

属性类型描述
anchorPointpoint移动过程中旋转时的锚点
durationint动画时长
easinggroup缓冲曲线 / 动画曲线
endRotationreal移动过程中旋转时的锚点
orientationenumeration移动过程中旋转枚举,控制移动过程中的旋转方式
orientationEntryDurationreal开始转动时长(毫秒)
orientationExitDurationreal转动结束时长(毫秒)
pathPath移动路径
targetItem移动目标
PauseAnimation 暂停动画

在串行动画中用于两个动画之间暂停一段时间。

PropertyAction

用于动画期间立即指定属性值,属性改变过程中没有动画。在某一段动画过程中,可能需要立即指定某个属性的值,就可以使用PropertyAction。
比如在顺序动画中,动画开始时指定不透明度为0.5,动画结束时指定动画为不透明度1.0

		SequentialAnimation {PropertyAction { target: img; property: "opacity"; value: .5 }NumberAnimation { target: img; property: "width"; to: 300; duration: 1000 }PropertyAction { target: img; property: "opacity"; value: 1 }}```同样,官方例子给出在Transition 中使用,结合PropertyChanges,动画之前立即指定属性值。```javascriptItem {width: 400; height: 400Rectangle {id: rectwidth: 200; height: 100color: "red"states: State {name: "rotated"PropertyChanges { target: rect; rotation: 180; transformOrigin: Item.BottomRight }}transitions: Transition {SequentialAnimation {PropertyAction { target: rect; property: "transformOrigin" } //对比屏蔽该行代码前后的动画效果RotationAnimation { duration: 1000; direction: RotationAnimation.Counterclockwise }}}MouseArea {anchors.fill: parentonClicked: rect.state = "rotated"}}}
PropertyAnimation 属性动画

子动画有四个:ColorAnimation, NumberAnimation, RotationAnimation, Vector3dAnimation
官方给出了五种使用场景

  1. 在Transition中使用
    Rectangle {id: rectwidth: 100; height: 100color: "red"states: State {name: "moved"PropertyChanges { target: rect; x: 50 }}transitions: Transition {PropertyAnimation { properties: "x,y"; easing.type: Easing.InOutQuad }}
    }
    
  2. 在Behavior中
    Rectangle {width: 100; height: 100color: "red"Behavior on x { PropertyAnimation {} }MouseArea { anchors.fill: parent; onClicked: parent.x = 50 }
    }
    
  3. 在动画组中
    Rectangle {width: 100; height: 100color: "red"SequentialAnimation on x {loops: Animation.InfinitePropertyAnimation { to: 50 }PropertyAnimation { to: 0 }}
    }
    
  4. 在槽函数中(语句块中)
    MouseArea {anchors.fill: theObjectonClicked: PropertyAnimation { target: theObject; property: "opacity"; to: 0 }
    }
    
  5. 单独作为子控件
    Rectangle {id: theRectwidth: 100; height: 100color: "red"// this is a standalone animation, it's not running by defaultPropertyAnimation { id: animation;target: theRect;property: "width";to: 30;duration: 500 }MouseArea { anchors.fill: parent; onClicked: animation.running = true }
    }
    
ScriptAction 脚本执行

在动画中的某个时间点指定一段脚本代码,与 StateChangeScript搭配使用

属性类型描述
scriptscript要执行的脚本函数
scriptNamestring脚本名称
示例代码:
SequentialAnimation {NumberAnimation {}ScriptAction { script: doSomething(); }NumberAnimation {}
}State {name: "state1"StateChangeScript {name: "myScript"script: doStateStuff();}// ...
}
// ...
Transition {to: "state1"SequentialAnimation {NumberAnimation { /* ... */ }ScriptAction { scriptName: "myScript" }NumberAnimation { /* ... */ }}
}
SequentialAnimation 顺序动画组
AnimationController 动画控制器
属性类型描述
animationAnimation动画
progressreal进度
一般动画都是由内部定时器驱动的,AnimationController可以通过progress手动控制动画进度。

示例代码如下:

import QtQuick 2.15
import QtQuick.Window 2.12import QtPositioning 5.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.3ApplicationWindow {//id:windowvisible: truewidth: 600height: 400title: qsTr("Hello World")color: "gray"Image {id: imgwidth: 200height: 150source: "qrc:/image/t2.jpg"opacity:1.0}SequentialAnimation {id:aniPropertyAction { target: img; property: "opacity"; value: .5 }NumberAnimation { target: img; property: "width"; to: 500; duration: 1000 }NumberAnimation { target: img; property: "width"; to: 150; duration: 1000 }PropertyAction { target: img; property: "opacity"; value: 1 }}AnimationController{id:controlleranimation: aniprogress: slider.value}Slider{id:slideranchors.bottom: parent.bottomfrom:0to:1}}
Animator 高级动画类型

一种特殊的动画类型,直接操作Qt Quick’s scene graph,而不像Animation那样操作的是QML对象和对象属性。Animator是基于scene graph的渲染线程的,所以当UI线程阻塞时,Animator也能正常运行。

Behavior 行为动画

为某个属性创建动画。
使用方式有两种:

//第一种Behavior on width {NumberAnimation { duration: 1000 }}
//第二种 这种方式可以用于自定义Behavior
Behavior {id: rootproperty Item fadeTarget: targetProperty.objectSequentialAnimation {NumberAnimation {target: root.fadeTargetproperty: "opacity"to: 0easing.type: Easing.InQuad}PropertyAction { } // actually change the controlled property between the 2 other animationsNumberAnimation {target: root.fadeTargetproperty: "opacity"to: 1easing.type: Easing.OutQuad}}
}

BorderImage 带边框的图片

BorderImage 分为9个区域, 调整大小过程中,1、3、7、9保持不变,2 8依赖horizontalTileMode 进行scale 或者tile,4、6依赖verticalTileMode 进行scale 或者tile。5依赖horizontalTileMode 和verticalTileMode 进行scale 或者tile。

属性类型描述
asynchronousbool是否异步加载
border.bottomint下边距
border.leftint左边距
border.righint右边距
border.topint上边距
currentFrameint当前显示的帧索引[0 ~ frameCount -1],亲测改变其值不能动态显示动图,动图用AnimatedImage
frameCountint图片帧总数
horizontalTileModebool水平填充模式
mirrorbool是否镜像
progressbool加载进度,多用于网络图片
sourcebool图片路径,可以是网址
sourceSizebool原图大小,只读属性
statusbool加载状态
verticalTileModebool垂直填充模式
在这里插入图片描述

BorderImageMesh 一种用于ShaderEffect的图片控件

当使用BorderImage作为ShaderEffectSource时,可选用该控件作为ShaderEffect的mesh属性,其性能最优。

Canvas 画布控件

画布控件用于绘制各种图形,线条,复杂形状,图片,图案,阴影,文本等,可以将画布的输出保存为一个图片或者序列化为一个URL。在画布上渲染需要借助Context2D对象。
渲染目标有两种:Canvas.Image and Canvas.FramebufferObject
Canvas.Image 使用系统内存渲染。支持background thread 渲染。如果绘制的内容很复杂,比如有大量动画,就需要使用Canvas.FramebufferObject。
另外,Canvas可以作为纹理提供者,作为ShaderEffect的输入。同时,还可以通过实现QQuickPaintedItem用于绘制。
其属性如下:

属性类型描述
availablebool
canvasSizesize画布大小
contextobject画笔
contextTypestring
renderStrategyenumeration
renderTargetenumeration
绘制图片时,在onImageLoaded槽函数中,调用requestPaint()。

toDataURL() 函数将Canvas 输出为一个DataUrl,可用于在网页中显示(imag 标签的src),但是绘制的本地图片会在网页中加载失败。

示例代码:

import QtQuick 2.0
Canvas {id: mycanvaswidth: 100height: 200onPaint: {var ctx = getContext("2d");ctx.fillStyle = Qt.rgba(1, 0, 0, 1);ctx.fillRect(0, 0, width, height);}
}

Canvas 绘制图片有三种方式,其中会用到CanvasImageData 对象类型

import QtQuick 2.2Rectangle{width: 480;height: 400;id: root;//绘制一个随机像素的图片Canvas{id: randomImageData;width: 120;height: 100;contextType: "2d";property var imageData: null;onPaint: {if(imageData == null){imageData = context.createImageData(120 , 100);for(var i = 0 ; i < 48000 ; i += 4){imageData.data[i] = Math.floor(Math.random() *255);imageData.data[i + 1] = Math.floor(Math.random() *255);imageData.data[i + 2] = Math.floor(Math.random() *255);imageData.data[i + 3] = Math.floor(Math.random() *255);}}context.drawImage(imageData , 0 , 0 );}}//绘制一个和本地颜色相同的图片Canvas{id: imageCanvas;property var poster: "icon.jpg";anchors.left: parent.left;anchors.top: randomImageData.bottom;anchors.topMargin: 20;width: 200;height: 230;onPaint: {var ctx  = getContext("2d");ctx.drawImage(poster , 0 ,0, width , height);}Component.onCompleted: loadImage(poster);onImageLoaded: {requestPaint();negative.setImageData(getContext("2d").createImageData(poster));}}//利用CanvasImageData绘图,并将图片颜色反转Canvas{id: negative;anchors.left: imageCanvas.right;anchors.leftMargin: 10;anchors.top: imageCanvas.top;width: 200;height: 230;contextType: "2d";property var imageData: null;onPaint: {if(imageData != null){context.drawImage(imageData , 0 ,0 , width , height);}}function setImageData(data){imageData = data;var limit = data.width *data.height * 4;for(var i = 0 ; i < limit ; i+= 4 ){imageData.data[i] = 255 - data.data[i];imageData.data[i + 1] = 255 - data.data[i + 1];imageData.data[i + 2] = 255 - data.data[i + 2];imageData.data[i + 3] = data.data[i + 3];}requestPaint();}}
}

CanvasGradient 设置渐变色

设置Context2D的渐变色,
创建线性渐变色:context.createLinearGradient()
创建圆锥形渐变色:context.createConicalGradient()
创建圆弧形渐变色:context.createRadialGradient()

示例代码:

  	context.strokeStyle="red"// 设置渐变色var gradient=context.createRadialGradient(40,40,70,80,80, 50)gradient.addColorStop(0.0, Qt.rgba(1,0,0,0.5))gradient.addColorStop(0.5, Qt.rgba(0,1,0,0.5))gradient.addColorStop(1.0, Qt.rgba(0,0,1,0.5))context.fillStyle=gradientcontext.beginPath()context.rect(0, 0, 100, 100)context.fill()context.stroke()

Column 列定位器

定位器布局控件有:Column, Row, Grid, and Flow
属性

属性类型描述
paddingreal四周间隔
bottomPaddingreal
leftPaddingreal
rightPaddingreal
topPaddingreal
addTransition添加或者显示子控件时的过渡
moveTransition移动时动画
populateTransition定位器初次创建时的过渡
spacingreal间隔

注意:过渡(Transition)和动画(Animation)有区别。
官方示例

Context2D 2维上下文

在Canvas中绘制图案的所需对象。该对象的方法较多,绘制几何图形较为复杂。详情查看官方文档

DoubleValidator(Validator 验证器)

QML 中提供的验证器,IntValidator DoubleValidator RegExpValidator RegularExpressionValidator

属性类型描述
bottomreal最小值 默认负无穷大
topreal最大值 默认负穷大
decimalsint精度,小数个数,默认1000
localestring本地字符集,格式:language[_territory][.codeset][@modifier]" or “C”
notationenumeration标记法:DoubleValidator.StandardNotation 标准 DoubleValidator.ScientificNotation 科学计数法 允许输入科学计数法

Drag 拖拽控件

注意:使用锚布局的控件作为Darg的target,该控件无法拖动。如果想要拖拽某个控件(未使用锚布局),又不需要其自身移动,可以使用一个Item作为拖拽目标,设置Drag.imageSource为该控件的grabImage.
拖拽使用的三个控件DropArea DragEvent Drag
DropArea 的 entered 、 positionChanged 、 dropped 信号的参数都是 DragEvent。 博客示例
官方示例

import QtQuick 2.8Item {width: 200; height: 200Rectangle {anchors.centerIn: parent  // 使用了锚布局,无法拖动width: text.implicitWidth + 20; height: text.implicitHeight + 10color: "green"radius: 5Drag.active: dragArea.drag.activeDrag.dragType: Drag.AutomaticDrag.supportedActions: Qt.CopyActionDrag.mimeData: {"text/plain": "Copied text"}Text {id: textanchors.centerIn: parenttext: "Drag me"}MouseArea {id: dragAreaanchors.fill: parentdrag.target: parentonPressed: parent.grabToImage(function(result) {parent.Drag.imageSource = result.url})}}
}

Flickable 可以鼠标拂动的控件

该控件属性较多,相对比较基础,可以查看官方说明文档

Flipable 可翻转的控件

属性类型描述
backItem背面的Item
frontItem正面的Item
sideenumeration当前显示的是正面(Flipable.Front)还是背面(Flipable.Back)

示例代码

Flipable {id: flipableanchors.centerIn: parentwidth: 240height: 240property bool flipped: falsefront: AnimatedImage { source: "qrc:/image/004.gif"; anchors.centerIn: parent }back: AnimatedImage { source: "qrc:/image/002.gif"; anchors.centerIn: parent }transform: Rotation {id: rotationorigin.x: flipable.width/2origin.y: flipable.height/2axis.x: 0; axis.y: 1; axis.z: 0     // set axis.y to 1 to rotate around y-axisangle: 0    // the default angle}states: State {name: "back"PropertyChanges { target: rotation; angle: 180 }when: flipable.flipped}transitions: Transition {NumberAnimation { target: rotation; property: "angle"; duration: 1000 }}MouseArea {anchors.fill: parentonClicked: flipable.flipped = !flipable.flipped}}

Flow 漂浮布局

属于定位器布局,和Column 大多属性相同。因为漂浮存在上下漂浮和左右漂浮,所以有flow和layoutDirection 属性

属性类型描述
flowenumeration漂浮的方向:Flow.LeftToRight(默认) Flow.TopToBottom
layoutDirectionenumeration布局方向

FocusScope

焦点控件,如果调用了FocusScope子控件(包括子控件的子控件)的forceActiveFocus(),那么,FocusScope的activeFocus属性将为true.
引用一位博主的一段话:
*

在一个FocusScope的内部,只能有一个元素将focus属性设置为true,如果有多个元素将focus属性设置为true,则只有第一个被设置为true,其它元素的被设置为false。
如果一个FocusScope获得了活动焦点,则它包含的元素中设置focus属性为true的元素(如果有的话),也同样获得活动焦点。如果FocusScope包含的元素仍为FocusScope,则前面的特性将一直延续下去。

示例代码

import QtQuick 2.0FocusScope{id:rootRectangle {width: 300height: 300border.color:root.activeFocus? "gray":"green"border.width: 2Rectangle{width: 100height: 100color: "red"anchors.centerIn: parentMouseArea{anchors.fill: parentonPressed: {parent.forceActiveFocus()}}}}
}

FontLoader 字体加载器

可加载系统字体、本地文件字体和网络字体
示例代码

import QtQuick 2.12
import QtQuick.Window 2.12Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Column {FontLoader { id: fixedFont; name: "Courier" }FontLoader { id: localFont; source: "qrc:/FZZJ-HYJTJW.TTF" }FontLoader { id: webFont; source: "http://www.mysite.com/myfont.ttf" }Text { text: "Fixed-size font"; font.family: fixedFont.name }Text { text: localFont.status == FontLoader.Ready ? '本地字体加载成功' : '本地字体加载中..'; font.family: localFont.name }Text { text: webFont.status == FontLoader.Ready ? '网络字体加载成功' : '网络字体加载中..';font.family: webFont.name }}
}

在这里插入图片描述

FontMetrics 字体度量器

可以获取字体的一些基本信息。可以通过font属性获取或者设置字体的信息。同时提供了一些方法,可以省略文本或者获取文本的外接矩形。

Gradient 颜色梯度值

属性

属性类型描述
orientationenumeration方向 Gradient.Vertical Gradient.Horizontal
stopslist<GradientStop>中间值,控制梯度值

官方示例代码

Rectangle {width: 100; height: 100gradient: Gradient {GradientStop { position: 0.0; color: "red" }GradientStop { position: 0.33; color: "yellow" }GradientStop { position: 1.0; color: "green" }}
}

GraphicsInfo 渲染信息控件(附加属性)

可获取当前Item使用的渲染引擎类型,版本和着色器编译类型信息,该属性为附加属性,不可以单独创建。

示例代码:获取Text的渲染信息

Text {anchors.centerIn: parenttext: GraphicsInfo.shaderTypeComponent.onCompleted: {console.log(GraphicsInfo.shaderType,GraphicsInfo.renderableType,GraphicsInfo.api)}
}
Grid 格子定位器

具有定位器的基本动画属性和方向属性。可指定行数和列数,默认四列,可不指定行数。具体属性看官方文档,使用相对简单。
官方示例代码

import QtQuick 2.0Grid {columns: 3spacing: 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 }
}

在这里插入图片描述

GridMesh 网格点生成器

GridMesh定义了一个矩形网格,它由均匀分布在网格中的顶点组成。它用于生成几何图形。使用resolution属性指定网格分辨率。主要用与ShaderEffect生成网格点,类似再顶点之间插值多个网格点,使得传入顶点着色器的顶点数量增加。
示例代码

    ShaderEffect {anchors.centerIn: parentwidth: 400height: 400mesh: GridMesh {resolution: Qt.size(100, 100)}property variant source: Image {source: "qrc:/image/t2.jpg"sourceSize { width: 400; height: 400 }}vertexShader: "uniform highp mat4 qt_Matrix;attribute highp vec4 qt_Vertex;attribute highp vec2 qt_MultiTexCoord0;varying highp vec2 qt_TexCoord0;uniform highp float width;void main() {highp vec4 pos = qt_Vertex;highp float d = .5 * smoothstep(0., 1., qt_MultiTexCoord0.y);pos.x = width * mix(d, 1.0 - d, qt_MultiTexCoord0.x);gl_Position = qt_Matrix * pos;qt_TexCoord0 = qt_MultiTexCoord0;}"}

使用mesh 和不使用mesh的区别。
在这里插入图片描述
在这里插入图片描述

HoverHandler 鼠标和手势处理控件

相应鼠标时间和平板的光标事件。该类事件的基类是PointerHandler

Image 图片显示控件

支持矢量图和位图。如果要显示动图,请使用AnimatedSprite 和 AnimatedImage.
1 .加载大图片时,可以通过设置asynchronous 属性,让系统利用一个优先级较低的线程去加载。
2.加载网路图片时,自动会利用异步加载。
3.相同source 的image是共享数据的。
4.可以加载OpenGL 纹理文件(未亲测)。
PKM (since Qt 5.10)
KTX (since Qt 5.11)
ASTC (since Qt 5.13)
属性如下:

属性名称描述
asynchronousbool是否异步加载,只对加载本地文件有效,加载网络文件默认是异步的。
autoTransformbool是否自动使用图片的原始变换信息,比如EXIF 方向。
cachebool是否缓存,一般处理大图像时设置false
currentFrameint亲测该属性不好用,加载动图后,设置该属性不起作用
fillModeenumeration填充方式,详细见官方
frameCountint图片总的帧数
horizontalAlignmentenumeration当fillMode不是铺满时有用。
verticalAlignmentenumeration当fillMode不是铺满时有用。
mipmapbool设置为ture,缩放时,画质较高,但是性能较低。
mirrorbool是否镜像
paintedHeightreal只读属性,显示的高度和宽度,当fillMode是Image.PreserveAspectFit Image.PreserveAspectCrop 时,和height可能不一致。其他大多数情况两者都相等。
paintedWidthreal
progressreal异步加载进度
smoothbool是否进行平滑处理
sourceurl路径,可以是本地,也可以是网址。
sourceClipRectrect裁剪区域
sourceSizeQSize只读属性,图片的真实大小
statusenumeration加载状态 (Image.Null/Image.Ready/Image.Loading/Image.Error)

Item

该控件是Qt Quick中的可见控件的父控件。Item本身不可见,但是其属性可以控制其子控件的可见属性,比如位置和大小等。
附加属性:
Keys :按键处理
LayoutMirroring:布局镜像
Layers:分层处理,Item将会被渲染到一个离屏的surface上,当渲染的Item具有复杂的层次关系时,使用分层可以得到优化处理。
按键处理:Key Handling
Item中有一个附加属性:可以处理键盘事件。

当启用分层时,透明度的设置后,重叠区域不会混合。示例如下:
启用分层时的不透明度设置为0.5:
在这里插入图片描述
关闭分层时的不透明度设置为0.5:
在这里插入图片描述

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
Window {id:windowvisible: truewidth: 1000height: 800title: qsTr("Kompass")color: Qt.rgba(0.5,0.2,0.0,1.0)Image{width: 200height: 200source: "qrc:/image/imag5.jpg"}Item {id: nameopacity: 0.5//layer.enabled: true  // 启动分层width: 200height: 200Rectangle{width: 100height: 100color: "red"}Rectangle{x:50y:50width: 100height: 100color: "blue"}}}

Item复杂属性

属性类型描述
anchors.baselineAnchorLine不含文本的该属性和anchors.top相同,含有文本item,该值设置文本的下边对齐线
antialiasingbool抗锯齿
containmentMaskQObject*设置遮罩模板对象,使用该对象的contains函数
implicitHeightreal隐式的宽度和高度,当Item的大小根据其内容大小设置时有用。大多数Item该属性为0,Text Image等控件的隐式大小不为0.
implicitWidthreal同上
layer.effectComponent为该控件加特效,一般使用ShaderEffet
layer.enabledboolItem的层次是否启用。若为false ,layer的其他属性不生效。
layer.formatenumeration纹理格式
layer.mipmapbool开启多级纹理mipmap
layer.samplerNamestring采样器名称,还没具体明白其含义
layer.samplesenumeration一个像素点的采样个数,比如设置为2,4 ,将会使用多重采样。
layer.smoothbool是否平滑处理
layer.sourceRectrect设置图层的大小和位置,可用于裁剪控件内容
layer.textureMirroringenumeration纹理是否镜像
layer.textureSizesize设置纹理的大小,当纹理大小小于控件时,画面会模糊
layer.wrapModeenumeration边缘拉伸模式
resourceslist<Object>不可见子控件列表
childrenlist可见控件列表
datalistresources 和children 的并集
statestring状态
stateslist<State>
transformlist<Transform>
transformOriginenumeration
transitionslist<Transition>

示例
anchors.baseline
在这里插入图片描述

    Item {width: 400; height: 200Rectangle {y:80id: rectanglewidth: 80; height: 80color: "red"}Text {id:textext: "Hello World!"//anchors.baseline: rectangle.baselineanchors.left: rectangle.rightanchors.top: rectangle.top}Button{id:btn1text: "Button!"anchors.baseline: tex.baselineanchors.left: tex.right}Button{text: "Button!"anchors.baseline: rectangle.baselineanchors.left: btn1.right}}

containmentMask 使用shape作为Item的mask,鼠标事件仅在shape区域之内生效。

Rectangle {width: 120height: 120color: area.pressed ? "steelBlue" : "lightGray"containmentMask: ctr//TapHandler { id: th }MouseArea{id:areaanchors.fill: parentonPressed: {console.log("contains:",parent.contains(Qt.point(mouse.x,mouse.y)))}}Shape {id: ctranchors.fill: parentcontainsMode: Shape.FillContainsShapePath {strokeColor: "red"fillColor: "blue"startX: 30; startY: 30PathLine { x: ctr.width - 30; y: ctr.height - 30 }PathLine { x: 30; y: ctr.height - 30 }PathLine { x: 30; y: 30 }}}}

ItemGrabResult

该类型为 Item::grabToImage() 的返回值类型,其共有两个属性和一个方法

类型属性描述
imagevariant对应QImage
urlurl用于保存路径或作为Image的source
voidsaveToFile(fileName)保存截图到指定路径fileName

对象类型

QtQuick导入的大多数对象类型都基于Item类型,它本身派生自QtObject。当您导入QtQuick时,Qt QML模块提供的QML对象类型(例如QtObject和Component)也可用。

创建一个QtQuick工程

QML 信号槽

QML 枚举的使用

QML 动态加载控件

QML导入js文件

c++和QML 交互

使用C++属性和导入QML类型

QML中要使用C++类或者对象一般由两种方式:c++定义方式QML定义方式

  • C++定义方式(主要使用setContextProperty()函数)
  • QML的方式,(主要使用qmlRegisterType()函数)

在QML中使用C++属性、函数和信号

  • 访问属性
  • 访问函数
  • 访问信号

注册QML类型

  • 注册可实例化对象类型
  • 注册不可实例化对象类型
    有时需要注册一个不可实例化的对象类型,比如一个C++类:
    • 是接口类型;使用qmlRegisterInterface()注册指定QML类型名称的Qt接口类型;
    • 一个基类,不需要通过QML代码访问;使用无参的qmlRegisterType()函数;
    • 仅仅提供一些有用的枚举;使用qmlRegisterUncreatableType()函数
    • 是一个单例,只能使用其唯一的实例,不应该从QML进行实例化。使用qmlRegisterSingletonType()函数

QML 中的模型视图代理

数据存储

(保存和加载数据)
SQL
XML
JSON
Local Storage
QSetting
Qt Resource System
文件压缩(File Archiving)

QML 中的Scene Graph

QML 插件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从浏览器输入url到页面加载(六)前端必须了解的路由器和光纤小知识

前言 上一章我们说到了数据包在网线中的故事&#xff0c;说到了双绞线&#xff0c;还说到了麻花。这一章继续沿着这条线路往下走&#xff0c;说一些和cdn以及路由器相关&#xff0c;运营商以及光纤相关的小知识&#xff0c;前端同学应该了解一下的 目录 前言 1. CDN和路由器…

自定义类型详解(C语言)

自定义类型 一. 结构体1.1 什么是结构体1.2 结构体的声明1.3 特殊的声明1.4 结构体的自引用1.5 结构体变量的定义和初始化1.5.1 结构体变量的定义1.5.2 结构体变量的初始化 1.6 结构体内存对齐1.6.1 为什么存在内存对齐 1.7 修改默认对齐数1.8 结构体传参 二. 位段2.1 什么是位…

OCR学术前沿及产业应用高峰论坛202204

OCR学术前沿及产业应用高峰论坛 相关议程&#xff1a;https://mp.weixin.qq.com/s/LYoKHFad9D-gjhGlVF3Czg 广告OCR技术研究与应用-腾讯 视频制作ASR&#xff0c;ocr得到字幕 计算机动画CG OCR实践与技术创新 - 蚂蚁 loss优化 数据合成 对比学习的方式&#xff0c;什么样是…

冯诺依曼体系结构

文章目录 一.冯诺依曼体系结构的主要组成部分1.输入设备 & 输出设备2.存储器3.运算器 & 控制器 二.为什么这么设计三.现实案例 一.冯诺依曼体系结构的主要组成部分 当代的计算机&#xff0c;本质上都是一堆硬件的集合&#xff08;CPU、内存、磁盘、显卡等&#xff09;…

【C++】命名空间 ( namespace )

目录搁这 什么是命名空间命名空间的作用如何定义命名空间命名空间的种类如何使用命名空间内的成员作用域限定符命名空间展开命名空间全部展开命名空间部分展开 总结 什么是命名空间 命名空间是一种用来避免命名冲突的机制&#xff0c;它可以将一段代码的名称隔离开&#xff0c…

纯CSS实现的卡片切换效果

纯CSS实现的卡片切换效果 无需JS就可以实现限于纯静态页面产品展示不需要轮播,自动切换 示例代码 <template><div class"example-css-tab"><div class"container dwo"><div class"card"><input type"radio"…

【实战总结】SpringMVC架构升级SpringCloudAlibaba

升级目标 SpringMVCDubboZookeeper分布式架构改为Spring Cloud Alibaba微服务 技术框架:Spring Boot 2.7.2、Spring Cloud 2021.0.3 & Alibaba 2021.0.1.0 容器:Tomcat 9.0.65 JDK:1.8 配置中心:Nacos 2.0.4 消息队列:RocetMQ 4.9.3 配置中心:Apollo 11.0 缓存: Redis 4.0…

【C语言】杨氏矩阵中寻找元素

题目名称&#xff1a; 杨氏矩阵 题目内容&#xff1a; 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从下到上递增的&#xff08;杨氏矩阵的定义&#xff09;&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 形如这样的矩阵就是杨氏…

chatglm微调

chatGML 看到 【【官方教程】ChatGLM-6B 微调&#xff1a;P-Tuning&#xff0c;LoRA&#xff0c;Full parameter】 【精准空降到 15:27】 https://www.bilibili.com/video/BV1fd4y1Z7Y5/?share_sourcecopy_web&vd_sourceaa8c13cff97f0454ee41e1f609a655f1&t927 记得看…

一文了解Docker之网络模型

目录 1.Docker网络 1.1 Docker网络模型概述 1.2 Docker网络驱动程序 1.2.1 host模式 1.2.2 bridge模式 1.2.3 container模式 1.2.4 none模式 1.3 Docker网络命令示例 1.3.1 创建一个自定义网络 1.3.2 列出所有网络 1.3.3 连接容器到网络 1.3.4 断开容器与网络的连接…

SpringCloud(三)LoadBalancer负载均衡

一、负载均衡 实际上&#xff0c;在添加LoadBalanced注解之后&#xff0c;会启用拦截器对我们发起的服务调用请求进行拦截&#xff08;注意这里是针对我们发起的请求进行拦截&#xff09;&#xff0c;叫做LoadBalancerInterceptor&#xff0c;它实现ClientHttpRequestIntercep…

Android 系统的分区介绍

由于Android系统采用Linux架构&#xff0c;所以Android的系统分区可以类比同样采用Linux架构的操作系统&#xff08;如Windows&#xff09;。 Android系统分区分类 现在一般常见的Android分区方式共有三种&#xff0c;在不同的Android系统版本上会采用不同的分区方式。 1、传…

Postman接口自动化之postman脚本编写

这是之前搞的接口自动化方案&#xff0c;已经在业务测试中实现了使用postman编写接口脚本&#xff0c;通过GitHubJenkinsemail html report实现了接口自动化&#xff0c;现在分块整理一下。 postman脚本编写 1、创建集合 和 目录&#xff1a; 一条业务线下的接口可以放到一个…

sonarqube安装并配置CI/CD

sonarqube安装使用 目录 简介效果(配置在下面查看)官方文档环境准备配置compose-sonarqube.yml启动登录集成Gitlab 获取私钥sonarqube配置gitlab查看项目 配置 手动方式Gitlab CI/CD 自动检测 简介 SonarQube是一个开源的代码质量管理平台&#xff0c;用于对代码进行静态代…

【数学建模】——相关系数

第一部分&#xff1a;皮尔逊相关系数的计算以及数据的描述性统计 本讲我们将介绍两种最为常见的相关系数&#xff1a;皮尔逊person相关系数和斯皮尔曼spearman等级相关系数。它们可以用来衡量两个变量之间的相关性的大小&#xff0c;根据数组满足的不同条件&#xff0c;我们要选…

Monocular 3D Object Detection with Depth from Motion 论文学习

论文链接&#xff1a;Monocular 3D Object Detection with Depth from Motion 1. 解决了什么问题&#xff1f; 从单目输入感知 3D 目标对于自动驾驶非常重要&#xff0c;因为单目 3D 的成本要比多传感器的方案低许多。但单目方法很难取得令人满意的效果&#xff0c;因为单张图…

QT之智能指针

如果没有智能指针&#xff0c;程序员必须保证new对象能在正确的时机delete&#xff0c;四处编写异常捕获代码以释放资源&#xff0c;而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 来看看一个野指针例子 程序将会…

java学习路程之篇三、知识点、类、模块、项目、操作、下载、安装、IDEA

文章目录 1、IDEA开发工具2、IDEA的下载和安装3、IDEA中的第一个代码4、IDEAZ中的类、模块、项目的操作 1、IDEA开发工具 2、IDEA的下载和安装 3、IDEA中的第一个代码 4、IDEAZ中的类、模块、项目的操作

【计算机视觉 | 图像分类】arxiv 计算机视觉关于图像分类的学术速递(7 月 17 日论文合集)

文章目录 一、分类|识别相关(11篇)1.1 Multimodal Distillation for Egocentric Action Recognition1.2 Dual-Query Multiple Instance Learning for Dynamic Meta-Embedding based Tumor Classification1.3 Interactive Spatiotemporal Token Attention Network for Skeleton-…

基于ClickHouse解决活动海量数据问题 | 京东云技术团队

1、背景 魔笛活动平台要记录每个活动的用户行为数据&#xff0c;帮助客服、运营、产品、研发等快速处理客诉、解决线上问题并进行相关数据分析和报警。可以预见到需要存储和分析海量数据&#xff0c;预估至少几十亿甚至上百亿的数据量&#xff0c;所以需要选择一款能存储海量数…