En esta página

Permisos de aplicaciones QML

Muchas funciones de los dispositivos y sistemas operativos actuales pueden tener importantes implicaciones para la privacidad, la seguridad y el rendimiento si se utilizan indebidamente. Por ello, cada vez es más habitual que las plataformas requieran el consentimiento explícito del usuario antes de acceder a estas funciones.

El módulo Qt Qml Core expone la funcionalidad de permisos de aplicación de Qt C++ a QML a través de un conjunto de tipos de permisos que pueden utilizarse para comprobar o solicitar permisos de forma multiplataforma.

BluetoothPermission

Acceso a los periféricos Bluetooth del usuario

CalendarPermission

Acceso al calendario del usuario

CameraPermission

Acceso a la cámara del usuario

ContactsPermission

Acceso a los contactos del usuario

LocationPermission

Acceso a la localización del usuario

MicrophonePermission

Acceso al micrófono del usuario

Nota: Los tipos de permisos disponibles cubren la funcionalidad básica de módulos Qt como Qt Multimedia y Qt Positioning, pero no abarcan todos los permisos específicos de la plataforma. Actualmente no se admiten tipos de permisos personalizados.

Uso

Para comprobar y solicitar un permiso específico en su aplicación, incluya una instancia del tipo de permiso apropiado, y establezca cualquiera de sus propiedades si es necesario:

CalendarPermission {
    id: calendarPermission
    accessMode: CalendarPermission.ReadWrite
}

El tipo puede utilizarse para comprobar el estado actual de los permisos, por ejemplo, para controlar una interfaz de usuario basada en el estado:

states: [
    State {
        name: "waitingForPermission"
        when: calendarPermission.status == Qt.PermissionStatus.Undetermined
        PropertyChanges { target: permissionRequestItem; visible: true }
    },
    State {
        name: "permissionDenied"
        when: calendarPermission.status == Qt.PermissionStatus.Denied
        PropertyChanges { target: permissionDeniedItem; visible: true }
    }
]

En el ejemplo anterior, se superpondrán dos elementos específicos del permiso si el estado del permiso no es concedido. La interfaz de usuario de solicitud podría tener el siguiente aspecto:

Rectangle {
    id: permissionRequestItem
    anchors.fill: parent
    visible: false

    Text {
        anchors.centerIn: parent
        text: qsTr("We need your permission to access the calendar."
            + "Please tap this screen to request permission.")

    }

    MouseArea {
        anchors.fill: parent
        onClicked: calendarPermission.request()
    }
}

Con la correspondiente interfaz de usuario denegada:

Rectangle {
    id: permissionDeniedItem
    anchors.fill: parent
    color: "red"
    visible: false
    Text {
        anchors.centerIn: parent
        text: qsTr("We need your permission to access the calendar,"
            + "but permission was not granted. Please resolve.")
    }
}

Cambio de las propiedades del permiso

Las propiedades de un permiso pueden cambiarse, incluso después de que se haya iniciado una solicitud, llamando a `request()`. Esto actualizará el estado, si cambia como resultado de los nuevos valores de las propiedades, pero no dará lugar a una solicitud automática utilizando el nuevo conjunto de propiedades.

Por ejemplo, si se actualiza un permiso de calendario ya concedido para el modo de acceso Qt.CalendarPermission.ReadOnly a Qt.CalendarPermission.ReadWrite, la plataforma responderá de una de estas tres maneras:

  • Concediendo implícitamente el permiso ampliado, por ejemplo porque la plataforma no distingue entre los dos modos de acceso, lo que provocará que no se produzca ningún cambio de estado.
  • Volviendo a mover el estado a Indeterminado, para que el usuario pueda ser consultado de nuevo para acceder al permiso ahora ampliado.
  • Moviendo el estado a Denied, por ejemplo si los permisos no pueden ser ampliados una vez solicitados inicialmente.

Todos estos estados deben entonces mover la IU de la aplicación al estado apropiado, donde el usuario es informado del nuevo estado, con la posibilidad de solicitar el nuevo permiso si es posible, o revertir a un permiso menos extenso.

Interacción entre los elementos del permiso

Aunque el estado del permiso está vinculado en última instancia a la aplicación subyacente, cada elemento de permiso informa de su propio estado independientemente de todos los demás elementos, y debe solicitarse de forma independiente si es necesario.

Por ejemplo, solicitar acceso al calendario para un elemento no actualizará el estado de otro elemento de CalendarPermission, aunque tengan exactamente las mismas propiedades.

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