En esta página

Enumeraciones QML

Las enumeraciones utilizadas en QML pueden definirse en QML o en C++.

Para obtener información sobre la definición de enumeraciones en QML, consulte Atributos de enumeración.

Cuando se definen en C++, las enumeraciones expuestas a QML deben estar marcadas con las macros Q_ENUM o Q_ENUM_NS y formar parte de un tipo expuesto a QML mediante las macros QML_NAMED_ELEMENT o QML_ELEMENT. Para obtener más información, consulte Tipos de enumeración.

Sólo los tipos QML con nombre pueden contener enumeraciones utilizables en QML. Cada enumeración debe tener un tipo con nombre a su alrededor. Los espacios de nombres QML también son tipos QML y pueden contener enumeraciones.

En consecuencia, un valor de enumeración puede denominarse <Type>.<Value>. Por ejemplo, el tipo Text tiene un valor de enumeración AlignRight:

Text { horizontalAlignment: Text.AlignRight }

Los valores de enumeración son propiedades de la referencia de tipo producida por el nombre del tipo. También puede recuperarlos utilizando la sintaxis de corchetes de JavaScript, aunque esto es propenso a errores y no se recomienda:

// Avoid this if possible
Text { horizontalAlignment: Text["AlignRight"] }

Uso de enumeraciones en QML

Las enumeraciones no son tipos independientes en QML, sino propiedades de los tipos que las rodean. Un valor de enumeración se representa como el tipo subyacente de la enumeración. Para la mayoría de las enumeraciones, es seguro utilizar el tipo Number de JavaScript o el tipo double de QML para almacenarlas. Sin embargo, esto no siempre funciona para los enteros de 64 bits, ya que su rango excede el rango de enteros seguro de los dobles de 64 bits. Por lo tanto, las enumeraciones con valores fuera del rango de enteros seguro (-(2^53 - 1) a 2^53 - 1, ambos inclusive) no se pueden utilizar de forma segura en QML. Para enumeraciones con valores que se ajustan al rango numérico de un entero con signo de 32 bits, puede utilizar con seguridad el tipo int de QML como almacenamiento.

Por ejemplo:

import QtQuick

Item {
    // refer to Text.AlignRight using an int type
    property int enumValue: textItem.horizontalAlignment

    signal valueEmitted(int someValue)

    Text {
        id: textItem
        horizontalAlignment: Text.AlignRight
    }

    // emit valueEmitted() signal, which expects an int, with Text.AlignRight
    Component.onCompleted: valueEmitted(Text.AlignRight)
}

Enumeración clave cadena <-> clave valor ayudantes

El objeto global Qt proporciona métodos de ayuda que pueden asignar el nombre de una clave de la enumeración a su valor numérico o viceversa.

  • Qt.enumStringToValue: mapea una cadena que contiene el nombre de una clave a su valor numérico
  • Qt.enumValueToString: mapea un valor al nombre de una clave con ese valor
  • Qt.enumValueToStrings: asigna un valor a una lista de nombres de las claves con ese valor

Ejemplo:

// Main.qml
import QtQml

Item {
    enum E { Black = 0, White = 1, Grey = 2, Gray = 2 }

    // 1 (White)
    property int i: Qt.enumStringToValue(Main.E, "White")

    // "Black"
    property string s: Qt.enumValueToString(Main.E, Main.E.Black)

    // ["Grey", "Gray"]
    property list<string> ss: Qt.enumValueToStrings(Main.E, Main.E.Grey)
}

Véase también Tipos de valor QML, Atributos de enumeración, Tipos de enumeración, QtQml::Qt::enumStringToValue, QtQml::Qt::enumValueToString, y QtQml::Qt::enumValueToStrings.

© 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.