Convenciones de codificación de QML
Este documento contiene las convenciones de codificación de QML que seguimos en nuestra documentación y ejemplos y que recomendamos que otros sigan.
Declaraciones de objetos QML
A lo largo de nuestra documentación y ejemplos, los atributos de los objetos QML se estructuran siempre en el siguiente orden:
- id
- declaraciones de propiedades
- declaraciones de señales
- funciones JavaScript
- propiedades del objeto
- objetos hijo
Para una mejor legibilidad, separamos estas diferentes partes con una línea vacía.
Por ejemplo, un hipotético objeto QML foto tendría este aspecto:
Rectangle { id: photo // id on the first line makes it easy to find an object property bool thumbnail: false // property declarations property alias image: photoImage.source signal clicked // signal declarations function doSomething(x) // javascript functions { return x + photoImage.width; } color: "gray" // object properties x: 20 // try to group related properties together y: 20 height: 150 width: { // large bindings if (photoImage.width > 200) { photoImage.width; } else { 200; } } states: [ State { name: "selected" PropertyChanges { target: border; color: "red" } } ] transitions: [ Transition { from: "" to: "selected" ColorAnimation { target: border; duration: 200 } } ] Rectangle { // child objects id: border anchors.centerIn: parent color: "white" Image { id: photoImage anchors.centerIn: parent } } }
Propiedades agrupadas
Si utiliza varias propiedades de un grupo de propiedades, considere la posibilidad de utilizar la notación de grupo en lugar de la notación de puntos si mejora la legibilidad.
Por ejemplo, esto
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 }
podría escribirse así:
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 } }
Acceso no cualificado
Para mejorar la legibilidad y el rendimiento, haga siempre referencia explícita a las propiedades de los componentes padre por su id:
Propiedades requeridas
Cuando requiera datos definidos fuera del componente, hágalo explícito utilizando Propiedades requeridas. Las propiedades obligatorias deben establecerse o, de lo contrario, la creación del componente fallará. Son preferibles a las búsquedas no cualificadas porque son más eficaces y permiten tanto a los usuarios como a las herramientas razonar sobre el tipo de una propiedad externa. Además, eliminan las suposiciones que un componente tiene que hacer sobre el entorno en el que se crea.
Manejadores de señales
Al manejar parámetros en manejadores de señales, utilice funciones que los nombren explícitamente:
MouseArea { onClicked: event => { console.log(`${event.x},${event.y}`); } }
Código JavaScript
Para mejorar la legibilidad y el mantenimiento, generalmente declaramos cada propiedad en una línea independiente, incluso en el caso de expresiones sencillas.
Rectangle { color: "blue" width: parent.width / 3 }
Para las expresiones de script que abarcan varias líneas, utilizamos un formato de bloque:
Rectangle { color: "blue" width: { var w = parent.width / 3; console.debug(w); return w; } }
Si el script tiene más de un par de líneas o puede ser utilizado por diferentes objetos, recomendamos crear una función y llamarla de esta forma:
function calculateWidth(object : Item) : double { var w = object.width / 3; // ... // more javascript code // ... console.debug(w); return w; } Rectangle { color: "blue" width: calculateWidth(parent) }
Tenga en cuenta también que es recomendable añadir anotaciones de tipo a su función para razonar y refactorizar más fácilmente su aplicación, ya que tanto los tipos de parámetros como los de retorno son inmediatamente visibles desde la firma de la función.
Para scripts largos, pondremos las funciones en su propio archivo JavaScript y lo importaremos así:
import "myscript.js" as Script Rectangle { color: "blue"; width: Script.calculateWidth(parent) }
Si el código tiene más de una línea y, por tanto, está dentro de un bloque, utilizaremos punto y coma para indicar el final de cada sentencia:
MouseArea { anchors.fill: parent onClicked: event => { var scenePos = mapToItem(null, event.x, event.y); console.log("MouseArea was clicked at scene pos " + scenePos); } }
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.