文章钢要

1、qml基础知识

2、qml语言技巧

一、QML basic types

QML Language提供的基础类型:int ,bool,string,double,real,var,url,enumeration,list,color

QML Modules(QtQuick)提供的基础类型:date, point ,rect,size,Qt,QtObject,Component,Connections,Bingding

导出到QML环境中的C++类型。

注意事项:

1、list类型必须和object类型关联使用

2、enumeration必须 must be defined by a registered QML object type。

3、id属性首字符必须是小写字母或下划线

4、列表属性(list)是包含在【】内,以逗号分隔的多个元素集合。和js的数组类似。

5、信号处理器on<Signal>形式:onClicked:{ Qt.quit(); }

6、附加属性如:item{  Keys.enabled:false ;} ,Component.onCompleted:console.log("hello Qt");

二、QML入门

程序框架一:QQmlApplicationEngine 搭配 Window,QML有控制权

main(int argc,char *argv[]){
  QGuiApplication app(argc,argv);
  QQmlApplicationEngine engine;
  engine.load(QUrl(QStringListeral("qrc://main.qml")));
  return app.exec();//主循环
}
import QtQuick.Window 2.1
Window{
width:360;
 height:240;
MouseArea{
anchors.fill:parent;
onClicked:{ Qt.quick(); }
}
Text{
text:"Hello Qt Quick";
anchors.centerIn:parent;
}
}

程序框架二:Item作为QML根对象 (QQuickView 搭配 Item ),c++有控制权

main(int argc, char * argv[]){
QGuiApplication app(argc,argv);
QQuickView viewer;
viewer.setSource(QUrl("qrc://main.qml"));
viewer.show();
return app.exec();
}

Window用于创建一个与OS相关的顶层窗口,text,Rectangle,image都是在里面表演的演员。

Rectangle :color和gradient同时设置,那么gradient生效。如果设置color的属性为transparent,那么可以达到只绘制边框不填充的效果。

      border.width设置边框的宽度,border.color指定边框颜色

color:“#RRGGBB”,“#AARRGGBB”,Qt.rgba(0.8, 0.6, 0.4, 1.0)、Qt.lighter()

  类型参考:https://doc.qt.io/qt-5/qml-color.html

item: 自带通用属性x,y,width,height,anchoring,button处理

  本身不可见,可以用它来分组其他可视图元

anchors锚布局:top,bottom,verticalCenter,horizontalCenter,baseline

响应按键:通过附加属性Keys来处理按键。特定按键信号returnPressed,普通信号pressed和released

    Keys.enabled:true

    keys.onEscapePressed:Qt.quit();

    Keys.onBackPressed:Qt.quit();

    keys.onPressed:{

    event参数:KeyEvent类型。

    event.key :case  Qt.Key_0, Qt.Key_1,,Qt.Key_2,,Qt.Key_3,,Qt.Key_4,,Qt.Key_A。等}

Text:有font,text,color,elide(省略),textFormat,wrapMode,style等属性

Button:activeFocusOnPress属性指定按钮被按下时获取焦点。

ButtonStyle:有background(Component类型),control,label三个属性

    style:ButtonStyle{ background: Rectangle { } }

Image: fillMode属性可以设置图片的填充模式,Image.Stretch(拉伸),PreserveAspectFit(等比缩放),Image.PreserveAspectCrop(最大填充,必要时裁剪)

    Tile(水平和垂直两个方向平铺,就像贴瓷砖那样),TileVertically(垂直平铺),TileHorizontally(水平平铺),Pad(原样不变)

    Image默认是阻塞加载图片,可以设置asynchronous属性true开启异步。当status的值为Image.Ready时 可屏蔽加载等候界面。

    Image{ source: "images/myImage.png")}

    Image{ onStatusChanged:{ } } //status属性变化时会发射statusChanged信号

BusyIndicator:一个等待图元,耗时操作时使用

    running属性:true时显示

    style:可定制样式,默认是一个转圈圈的动画

FileDialog:文件对话框,通过open() 方法设置visible为true。

    selectExisting:表示选择已有文件或文件夹

    selectMultiple:ture表示多选

    nameFilters:用于设定一个过滤器列表。nameFilters:[ "Image Files (*.jpg *.png *.gif) , “Bitmap Filter (*.bmp)” , " * (*.*)" ]  //过滤器列表

    selectedNameFilter:"Image Files (*.jpg  *.png  *.gif)";  //保存用户选择的过滤器

    fileUrl:保存该文件的路径,如果选择多个文件则该属性为空。

    fileUrls:是一个列表

    folder:文件夹的位置

js 语法:Undefined类型只有一个值:undefined,声明的变量没有初始化时,就是该值

    如:var oneValue; if( oneValue == undefined){  } // 函数无明确返回值时,返回的也是undefined

    Null类型也只有衣蛾值,null   // property var reminderWindow:null

    类型转换:toString() ; // var integer = 3.1415;  console.log(integer.toString());

        parseInt()和parseFloat()把非数字的String转换成数字。

    强转:Boolean(),Number(),String()

对象:Object是所有js类的基类,isPrototypeOf(object) ,判断对象是否为另一个对象的原型

      propertyIsEnumerable(property),判断给定的属性是否可以用for...in 语句进行枚举。

      toString(),返回对象的字符串表示,对于Rectangle.toString()返回其对应的C++类型名字或QML类型名字。

      valueOf(),返回最适合该对象的原始值,对于许多类,该方法返回的值都与toString一样。

    动态增加属性:var person = new object();   person.name = "zhangsan";  person.year = 20;

    动态增加方法:person.printInfo = function printInfo() {  };

    使用数组下标访问方法:person["printInfo"]() ; //这个有点意思

    for ...in :访问对象属性: for (var prop in person) {  console.log(prop  , " , ",  person[prop] )};

    字面量表示法:var person = { "name" : "zhangsan" ; "year" : 20 }

    console提供定时器,可以用于计算代码耗时

      console.time(tag) //启动定时器 ,字符串类型的tag是必需的

      console.timeEnd(tag) // 停止计时器

三、测试

最新文章

  1. Modify Branding of FreeCAD
  2. 学python
  3. 艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)
  4. LeakCanary中英文文档+使用例子
  5. 跨域解决方案二:使用JSONP实现跨域
  6. 移动网站中,用canvas,svg比用图片好?
  7. BZOJ3105: [cqoi2013]新Nim游戏 博弈论+线性基
  8. CentOS7 运行级别
  9. 修改nginx服务器类型
  10. 安卓内存不足(删除data/dalvik-cache目录)
  11. SQL备份(全)
  12. nginx 默认会把header里的参数去掉下划线
  13. UVA - 12333 字典树+大数
  14. [BZOJ1503] [NOI2004] 郁闷的出纳员 (treap)
  15. MySQL事务的的介绍及使用
  16. 初读&quot;Thinking in Java&quot;读书笔记之第八章 --- 多态
  17. git format-patch制作内核补丁
  18. csrf_token 跨站请求设置
  19. POJ 1548 Robots(最小路径覆盖)
  20. Shell中整数比較

热门文章

  1. python进阶之路5之流程控制(垃圾回收机制)
  2. [超详细] [效能工具]Typora+PicGo+Github免费图床快速搭建,提升技术文档输出效率
  3. 今天学到的新知识--使用localtunnel实现内网穿透,感觉很神奇哇~~
  4. 如何让Java编译器帮你写代码
  5. Object类的toString方法-Object类的equas方法
  6. drf-序列化器、反序列化、反序列化校验
  7. ACID和CAP的比较
  8. 视觉十四讲:第六讲_ceres非线性优化
  9. 【译】.NET 7 中的性能改进(一)
  10. [COCI2015-2016#2] VUDU