QDesktopServices Class
La clase QDesktopServices proporciona métodos para acceder a servicios de escritorio comunes. Más...
| Cabecera: | #include <QDesktopServices> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
Miembros públicos estáticos
| bool | openUrl(const QUrl &url) |
| void | setUrlHandler(const QString &scheme, QObject *receiver, const char *method) |
| void | unsetUrlHandler(const QString &scheme) |
Descripción detallada
Muchos entornos de escritorio proporcionan servicios que pueden ser utilizados por las aplicaciones para realizar tareas comunes, tales como abrir una página web, de una manera que es a la vez coherente y tiene en cuenta las preferencias de la aplicación del usuario.
Esta clase contiene funciones que proporcionan interfaces sencillas a estos servicios que indican si han tenido éxito o han fallado.
La función openUrl() se utiliza para abrir archivos situados en URL arbitrarias en aplicaciones externas. Para las URL que corresponden a recursos del sistema de archivos local (donde el esquema de URL es "archivo"), se utilizará una aplicación adecuada para abrir el archivo; de lo contrario, se utilizará un navegador web para obtener y mostrar el archivo.
La configuración del escritorio del usuario controla si determinados tipos de archivos ejecutables se abren para navegar o si, por el contrario, se ejecutan. Algunos entornos de escritorio están configurados para impedir que los usuarios ejecuten archivos obtenidos de URL no locales, o para pedir permiso al usuario antes de hacerlo.
Manejadores de URL
El comportamiento de la función openUrl() puede personalizarse para esquemas de URL individuales con el fin de permitir que las aplicaciones anulen el comportamiento de manejo predeterminado para determinados tipos de URL.
El mecanismo de envío sólo permite utilizar un manejador personalizado para cada esquema de URL; esto se establece utilizando la función setUrlHandler(). Cada manejador se implementa como una ranura que sólo acepta un único argumento QUrl.
Los manejadores existentes para cada esquema pueden eliminarse con la función unsetUrlHandler(). Esto devuelve el comportamiento de manejo para el esquema dado al comportamiento por defecto.
Este sistema facilita la implementación de un sistema de ayuda, por ejemplo. La ayuda podría ser proporcionada en etiquetas y navegadores de texto usando URLs help://myapplication/mytopic, y registrando un manejador se hace posible mostrar el texto de ayuda dentro de la aplicación:
class MyHelpHandler : public QObject { Q_OBJECT public: // ... public slots: void showHelp(const QUrl &url); }; QDesktopServices::setUrlHandler("help", helpInstance, "showHelp");
Si dentro del manejador se decide que no se puede abrir la URL solicitada, basta con volver a llamar a QDesktopServices::openUrl() con el mismo argumento, y se intentará abrir la URL utilizando el mecanismo apropiado para el entorno de escritorio del usuario.
Combinados con configuraciones específicas de la plataforma, los esquemas registrados por la función openUrl() también pueden ser expuestos a otras aplicaciones, abriéndose a la vinculación profunda de aplicaciones o a un mecanismo IPC muy básico basado en URL.
Véase también QSystemTrayIcon, QProcess, y QStandardPaths.
Documentación de las funciones miembro
[static] bool QDesktopServices::openUrl(const QUrl &url)
Abre la dirección url en el navegador web adecuado para el entorno de escritorio del usuario y devuelve true si se ha abierto correctamente; en caso contrario, devuelve false.
Si la URL es una referencia a un archivo local (es decir, el esquema de URL es "archivo"), se abrirá con una aplicación adecuada en lugar de con un navegador web.
El siguiente ejemplo abre un archivo en el sistema de archivos de Windows que reside en una ruta que contiene espacios:
QDesktopServices::openUrl(QUrl("file:///C:/Program Files", QUrl::TolerantMode));
Si se especifica una URL mailto, se utilizará el cliente de correo electrónico del usuario para abrir una ventana de composición que contenga las opciones especificadas en la URL, de forma similar a como se gestionan los enlaces mailto en un navegador Web.
Por ejemplo, la siguiente URL contiene un destinatario (user@foo.com), un asunto (Test), y un cuerpo de mensaje (Just a test):
mailto:user@foo.com?subject=Test&body=Just a test
Advertencia: Aunque muchos clientes de correo electrónico pueden enviar archivos adjuntos y son compatibles con Unicode, es posible que el usuario haya configurado su cliente sin estas características. Además, algunos clientes de correo electrónico (por ejemplo, Lotus Notes) tienen problemas con las URL largas.
Advertencia: Un valor de retorno de true indica que la aplicación ha solicitado con éxito al sistema operativo que abra la URL en una aplicación externa. Sin embargo, es posible que la aplicación externa no se inicie o no abra la URL solicitada. Este resultado no se comunicará a la aplicación.
Advertencia: Las URL pasadas a esta función en iOS no se cargarán a menos que sus esquemas aparezcan en la clave LSApplicationQueriesSchemes del archivo Info.plist de la aplicación. Para más información, consulte la documentación para desarrolladores de Apple sobre canOpenURL:. Por ejemplo, las siguientes líneas habilitan las URL con el esquema HTTPS:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>https</string>
</array>Nota: Para Android Nougat (SDK 24) y superior, las URL con un esquema file se abren utilizando FileProvider, que intenta obtener primero una URI de esquema content compartible. Por ese motivo, Qt para Android define un proveedor de archivos con la autoridad ${applicationId}.qtprovider, siendo applicationId el nombre del paquete de la app para evitar conflictos de nombres. Para más información, consulta también Configurar la compartición de archivos.
Véase también setUrlHandler().
[static] void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, const char *method)
Establece el manejador para el scheme dado para que sea el manejador method proporcionado por el objeto receiver.
Esta función permite personalizar el comportamiento de openUrl(). Si openUrl() es llamado con una URL con el scheme especificado entonces el method dado en el objeto receiver es llamado en lugar de QDesktopServices lanzando una aplicación externa.
El método proporcionado debe implementarse como una ranura que sólo acepte un único argumento QUrl.
class MyHelpHandler : public QObject { Q_OBJECT public: // ... public slots: void showHelp(const QUrl &url); };
Si setUrlHandler() se utiliza para establecer un nuevo manejador para un esquema que ya tiene un manejador, el manejador existente es simplemente reemplazado por el nuevo. Dado que QDesktopServices no se apropia de los manejadores, no se elimina ningún objeto cuando se sustituye un manejador.
Tenga en cuenta que el manejador siempre será llamado desde el mismo hilo que llama a QDesktopServices::openUrl().
Debe llamar a unsetUrlHandler() antes de destruir el objeto manejador, para que la destrucción del objeto manejador no se solape con invocaciones concurrentes de openUrl() que lo utilicen.
iOS y macOS
Para utilizar esta función para recibir datos de otras aplicaciones en iOS/macOS también debe añadir el esquema personalizado a la lista CFBundleURLSchemes de su archivo Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>myapp</string>
</array>
</dict>
</array>Para obtener más información, consulte la Documentación para desarrolladores de Apple para definir un esquema de URL personalizado para su aplicación.
Advertencia: No es posible reclamar compatibilidad con algunos esquemas de URL conocidos, incluidos http y https. Esto sólo está permitido para los enlaces universales.
Para reclamar soporte para http y https no se permite la entrada anterior en el archivo Info.plist. Esto sólo es posible cuando añade su dominio al archivo de derechos:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:your.domain.com</string>
</array>iOS/macOS buscará /.well-known/apple-app-site-association en tu dominio, cuando se instale la aplicación. Si desea escuchar a https://your.domain.com/help?topic=ABCDEF es necesario proporcionar el siguiente contenido allí:
{
"applinks": {
"apps": [],
"details": [{
"appIDs" : [ "ABCDE12345.com.example.app" ],
"components": [{
"/": "/help",
"?": { "topic": "?*"}
}]
}]
}
}Para obtener más información, consulte la documentación para desarrolladores de Apple sobre la compatibilidad con dominios asociados.
Android
Para utilizar esta función para recibir datos de otras aplicaciones en Android, debe añadir uno o más filtros de intención a activity en el manifiesto de su aplicación:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="your.domain.com" android:port="1337" android:path="/help"/>
</intent-filter>Para obtener más información, consulte la documentación para desarrolladores de Android para Crear enlaces profundos al contenido de la aplicación.
Para abrir inmediatamente el contenido correspondiente en tu aplicación Android, sin que el usuario tenga que seleccionar la aplicación, necesitas verificar tu enlace. Para habilitar la verificación, añada un parámetro adicional a su filtro de intención:
<intent-filter android:autoVerify="true">
Android buscará https://your.domain.com/.well-known/assetlinks.json, cuando se instale la aplicación. Si desea escuchar https://your.domain.com:1337/help, deberá proporcionar allí el siguiente contenido:
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints":
["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
}
}]Para obtener más información, consulte la documentación para desarrolladores de Android para Verificar enlaces de aplicaciones Android.
Consulte también openUrl() y unsetUrlHandler().
[static] void QDesktopServices::unsetUrlHandler(const QString &scheme)
Elimina un manejador de URL previamente establecido para el scheme especificado.
Llama a esta función antes de que se destruya el objeto manejador que se registró para scheme, para evitar que las llamadas concurrentes a openUrl() continúen llamando al objeto manejador destruido.
Véase también setUrlHandler().
© 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.