翻译 | QML编码约定

本文翻译自: https://doc.qt.io/qt-5/qml-codingconventions.html
原作者: Qt官网

??本文档包含我们在文档和示例中应该遵循的QML编码约定,并建议其他人也遵循。

0x01 QML对象声明

??在整个文档和示例中,QML对象属性始终按以下顺序构造

  1. id
  2. property declarations(自定义属性声明)
  3. signal declarations(信号声明)
  4. JavaScript function(js函数)
  5. object properties(对象属性)
  6. child object(子对象)
  7. states(状态机)
  8. transitions(过渡效果)

??为了提高可读性,我们用空行将这些不同的部分分开

例如,photo的QML对象如下所示:

Rectangle {
    id: photo                                               // 第一行的id使查找对象变得很容易
    property bool thumbnail: false                          // 自定义属性声明
    property alias image: photoImage.source

    signal clicked                                          // 信号声明

    function doSomething(x)                                 // js函数
    {
        return x + photoImage.width
    }

    color: "gray"                                           // 对象属性
    x: 20                                                   // 将相关属性分组在一起
    y: 20
    height: 150
    width: {                                                // 复杂绑定
        if (photoImage.width > 200) {
            photoImage.width;
        } else {
            200;
        }
    }

    Rectangle {                                             // 子对象
        id: border
        anchors.centerIn: parent; color: "white"

        Image {
            id: photoImage
            anchors.centerIn: parent
        }
    }

    states: State {                                         // 状态机
        name: "selected"
        PropertyChanges { target: border; color: "red" }
    }

    transitions: Transition {                               // 过渡效果
        from: ""
        to: "selected"
        ColorAnimation { target: border; duration: 200 }
    }
}

0x02 分组属性

??如果使用一组属性中的多个属性,请考虑使用组符号代替点符号,以提高可读性

例如:

Rectangle {
    anchors.left: parent.left; anchors.top: parent.top; anchors.right: parent.right; anchors.leftMargin: 20
}

Text {
    text: "hello"
    font.bold: true; font.italic: true; font.pixelSize: 20; font.capitalization: Font.AllUppercase
}

这样写更合适:

Rectangle {
    anchors { left: parent.left; top: parent.top; right: parent.right; leftMargin: 20 }
}

Text {
    text: "hello"
    font { bold: true; italic: true; pixelSize: 20; capitalization: Font.AllUppercase }
}

0x03 列表

??如果列表对象仅包含一个元素,则通常会省略方括号。例如,一个组件仅具有一个状态是很常见的。在这种情况下,如果这样写:

states: [
    State {
        name: "open"
        PropertyChanges { target: container; width: 200 }
    }
]

但这样写更合适:

states: State {
    name: "open"
    PropertyChanges { target: container; width: 200 }
}

0x04 JavaScript代码

??如果脚本是单个表达式,则建议内联编写:

Rectangle { color: "blue"; width: parent.width / 3 }

??如果脚本只有几行,我们通常使用一个块:

Rectangle {
    color: "blue"
    width: {
        var w = parent.width / 3
        console.debug(w)
        return w
    }
}

??如果脚本的长度超过几行或可以被不同的对象使用,我们建议创建一个函数并按以下方式调用它

function calculateWidth(object)
{
    var w = object.width / 3
    // ...
    // more javascript code
    // ...
    console.debug(w)
    return w
}

Rectangle { color: "blue"; width: calculateWidth(parent) }

??对于长脚本,我们将这些函数放在自己的JavaScript文件中,并按如下所示导入它

import "myscript.js" as Script

Rectangle { color: "blue"; width: Script.calculateWidth(parent) }

??如果块内代码有好几行,则使用分号去标识每个语句的结尾

MouseArea {
    anchors.fill: parent
    onClicked: {
        var scenePos = mapToItem(null, mouseX, mouseY);
        console.log("MouseArea was clicked at scene pos " + scenePos);
    }
}

更多精彩内容请关注公众号Qt君

原文地址:https://www.cnblogs.com/qthub/p/12207759.html

时间: 2024-11-06 23:34:12

翻译 | QML编码约定的相关文章

QML 编码约定

由于作者不习惯该编辑器,只是将本文的截图贴了出来,详文见:https://www.yuque.com/docs/share/bfb77071-40e3-456e-8a75-b6996297c54f 原文地址:http://blog.51cto.com/4754569/2324524

Qt官方教程翻译——QML Applications

附网址:http://qt-project.org/doc/qt-5/qmlapplications.html QML Applications QML是一种声明式语言,它提供了一组接口用来描述视觉组件以及他们的互动和相关性.它是一个高度可读的语言,并且被设计成使组件以一个动态的方式相互连接.同时它使组件很容易被复用以及创建定制的用户界面.使用QtQuick模块,设计者和开发者可以很容易使用QML建立流体动画的用户界面,并将这些界面连接到后端的C++库上面. What is QML? QML是一

Qt官方教程翻译——QML Coding Conventions

附网址:http://qt-project.org/doc/qt-5/qml-codingconventions.html QML Coding Conventions 这个文档包含了QML的编码规范,我们将这个规范应用在全部文档和例程当中并推荐大家遵守. QML Object Declarations 在我们的文档和例子中,QML object attributes总是像下面这样的结构: id property declarations signal declarations JavaScri

C# 编码约定(C# 编程指南)——(待续)

原文链接:C# 编码约定(C# 编程指南) 原文地址:https://www.cnblogs.com/panpanwelcome/p/12430116.html

【分享】[iOS翻译]Cocoa编码规范

http://www.cnblogs.com/yangfaxian/p/4673894.html 简介: 本文整理自Apple文档<Coding Guidelines for Cocoa>.这份文档原意是给Cocoa框架.插件及公共API开发者提供一些编码指导,实质上相当于Apple内部的编码规范.在多人协作时,一份统一的代码规范大大减少开发者之间的沟通成本,极力推荐. 目录: 一.代码命名基础 二.方法 三.函数 四.Property及其他 五.缩写 一.代码命名基础 1.通用原则 1.1 

[iOS翻译] Cocoa编码规范

目录: 一.代码命名基础 二.方法 三.函数 四.Property及其他 五.缩写 一.代码命名基础 1.通用原则 1.1 清晰 尽量清晰又简洁,无法两全时清晰更重要 通常不应缩写名称,即使方法名很长也应完整拼写 你可能认为某个缩写众所周知,但其实未必,特别是你周围的开发者语言文化背景不同时 有一些历史悠久的缩写还是可以使用的,详见第五章 API命名避免歧义,例如一个方法名有多种理解 1.2 一致 尽力保持Cocoa编程接口命名一致 如果有疑惑,请浏览当前头文件或者参考文档 当某个类的方法使用了

C# 编码约定(C# 编程指南)

1.              命名约定 ·         在不包括 using 指令的短示例中,使用命名空间限定. 如果你知道命名空间默认导入项目中,则不必完全限定来自该命名空间的名称. 如果对于单行来说过长,则可以在点 (.) 后中断限定名称,如下面的示例所示. var currentPerformanceCounterCategory = new System.Diagnostics. PerformanceCounterCategory(); ·         你不必更改通过使用 V

Mediawiki.org的PHP编码约定

http://www.mediawiki.org/wiki/Manual:Coding_conventions/PHP assignment作为expression来用看起来像个错误 // No if ( $a = foo() ) { bar(); } // Yes $a = foo(); if ( $a ) { bar(); } 为提高代码可读性,Mediawiki大量使用空格 二元运算符 // No $a=$b+$c; // Yes $a = $b + $c; 函数名后面直接跟括号:括号内如

C# 编码约定

参考自 MSDN     https://msdn.microsoft.com/zh-cn/library/ff926074.aspx , 只摘要个人觉得有用部分 命名约定 在不包括 using 指令的短示例中,使用命名空间限定. 如果你知道命名空间默认导入项目中,则不必完全限定来自该命名空间的名称. 如果对于单行来说过长,则可以在点 (.) 后中断限定名称,如下面的示例所示 var currentPerformanceCounterCategory = new System.Diagnosti