Sur cette page

QDesktopServices Class

La classe QDesktopServices fournit des méthodes pour accéder aux services de bureau courants. Plus d'informations...

En-tête : #include <QDesktopServices>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

Membres publics statiques

bool openUrl(const QUrl &url)
void setUrlHandler(const QString &scheme, QObject *receiver, const char *method)
void unsetUrlHandler(const QString &scheme)

Description détaillée

De nombreux environnements de bureau fournissent des services qui peuvent être utilisés par les applications pour effectuer des tâches courantes, telles que l'ouverture d'une page web, d'une manière à la fois cohérente et tenant compte des préférences de l'utilisateur en matière d'applications.

Cette classe contient des fonctions qui fournissent des interfaces simples à ces services et qui indiquent s'ils ont réussi ou échoué.

La fonction openUrl() est utilisée pour ouvrir des fichiers situés à des URL arbitraires dans des applications externes. Pour les URL qui correspondent à des ressources du système d'archivage local (où le schéma URL est "file"), une application appropriée sera utilisée pour ouvrir le fichier ; sinon, un navigateur web sera utilisé pour récupérer et afficher le fichier.

Les paramètres du bureau de l'utilisateur déterminent si certains types de fichiers exécutables sont ouverts pour la navigation ou s'ils sont exécutés à la place. Certains environnements de bureau sont configurés pour empêcher les utilisateurs d'exécuter des fichiers obtenus à partir d'URL non locales, ou pour demander l'autorisation de l'utilisateur avant de le faire.

Gestionnaires d'URL

Le comportement de la fonction openUrl() peut être personnalisé pour des schémas d'URL individuels afin de permettre aux applications d'ignorer le comportement de gestion par défaut pour certains types d'URL.

Le mécanisme de distribution n'autorise l'utilisation que d'un seul gestionnaire personnalisé pour chaque schéma d'URL ; celui-ci est défini à l'aide de la fonction setUrlHandler(). Chaque gestionnaire est implémenté comme un slot qui n'accepte qu'un seul argument QUrl.

Les gestionnaires existants pour chaque schéma peuvent être supprimés à l'aide de la fonction unsetUrlHandler(). Cette fonction rétablit le comportement par défaut de la gestion pour le schéma donné.

Ce système facilite la mise en œuvre d'un système d'aide, par exemple. L'aide pourrait être fournie dans des étiquettes et des navigateurs textuels utilisant des URL help://myapplication/mytopic, et en enregistrant un gestionnaire, il devient possible d'afficher le texte d'aide à l'intérieur de l'application :

class MyHelpHandler : public QObject
{
    Q_OBJECT
public:
    // ...
public slots:
    void showHelp(const QUrl &url);
};
QDesktopServices::setUrlHandler("help", helpInstance, "showHelp");

Si, dans le gestionnaire, vous décidez que vous ne pouvez pas ouvrir l'URL demandé, il vous suffit d'appeler à nouveau QDesktopServices::openUrl() avec le même argument, et il essaiera d'ouvrir l'URL à l'aide du mécanisme approprié pour l'environnement de bureau de l'utilisateur.

Combinés à des paramètres spécifiques à la plate-forme, les schémas enregistrés par la fonction openUrl() peuvent également être exposés à d'autres applications, ce qui permet d'établir des liens profonds entre les applications ou un mécanisme IPC très basique basé sur l'URL.

Voir également QSystemTrayIcon, QProcess, et QStandardPaths.

Documentation des fonctions membres

[static] bool QDesktopServices::openUrl(const QUrl &url)

Ouvre l'adresse url dans le navigateur Web approprié à l'environnement de bureau de l'utilisateur et renvoie true en cas de succès ; sinon, renvoie false.

Si l'URL est une référence à un fichier local (c'est-à-dire que le schéma de l'URL est "file"), il sera ouvert avec une application appropriée au lieu d'un navigateur Web.

L'exemple suivant ouvre un fichier sur le système de fichiers Windows résidant sur un chemin d'accès contenant des espaces :

QDesktopServices::openUrl(QUrl("file:///C:/Program Files", QUrl::TolerantMode));

Si une URL mailto est spécifiée, le client de messagerie de l'utilisateur sera utilisé pour ouvrir une fenêtre de composition contenant les options spécifiées dans l'URL, de la même manière que les liens mailto sont traités par un navigateur Web.

Par exemple, l'URL suivante contient un destinataire (user@foo.com), un objet (Test) et un corps de message (Just a test) :

mailto:user@foo.com?subject=Test&body=Just a test

Avertissement : Bien que de nombreux clients de messagerie puissent envoyer des pièces jointes et soient compatibles avec Unicode, l'utilisateur peut avoir configuré son client sans ces fonctionnalités. De plus, certains clients de messagerie (par exemple Lotus Notes) ont des problèmes avec les URL longs.

Attention : Une valeur de retour de true indique que l'application a demandé avec succès au système d'exploitation d'ouvrir l'URL dans une application externe. Il se peut que l'application externe ne se lance pas ou n'ouvre pas l'URL demandée. Ce résultat ne sera pas communiqué à l'application.

Attention : Les URL transmises à cette fonction sur iOS ne seront pas chargées si leurs schémas ne sont pas répertoriés dans la clé LSApplicationQueriesSchemes du fichier Info.plist de l'application. Pour plus d'informations, voir la documentation Apple Developer Documentation pour canOpenURL :. Par exemple, les lignes suivantes activent les URL avec le schéma HTTPS :

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>https</string>
</array>

Remarque : pour Android Nougat (SDK 24) et supérieur, les URL avec un schéma file sont ouvertes à l'aide de FileProvider qui tente d'obtenir un URI de schéma content partageable en premier. Pour cette raison, Qt XML pour Android définit un fournisseur de fichiers avec l'autorité ${applicationId}.qtprovider, applicationId étant le nom du package de l'app pour éviter les conflits de noms. Pour plus d'informations, voir également Configuration du partage de fichiers.

Voir aussi setUrlHandler().

[static] void QDesktopServices::setUrlHandler(const QString &scheme, QObject *receiver, const char *method)

Définit le gestionnaire pour l'objet scheme donné comme étant le gestionnaire method fourni par l'objet receiver.

Cette fonction permet de personnaliser le comportement de openUrl(). Si openUrl() est appelé avec une URL contenant l'adresse scheme spécifiée, l'adresse method de l'objet receiver est appelée au lieu de QDesktopServices pour lancer une application externe.

La méthode fournie doit être implémentée comme un slot qui n'accepte qu'un seul argument QUrl.

class MyHelpHandler : public QObject
{
    Q_OBJECT
public:
    // ...
public slots:
    void showHelp(const QUrl &url);
};

Si setUrlHandler() est utilisé pour définir un nouveau gestionnaire pour un schéma qui a déjà un gestionnaire, le gestionnaire existant est simplement remplacé par le nouveau. Comme QDesktopServices n'est pas propriétaire des gestionnaires, aucun objet n'est supprimé lorsqu'un gestionnaire est remplacé.

Notez que le gestionnaire sera toujours appelé par le même thread qui appelle QDesktopServices::openUrl().

Vous devez appeler unsetUrlHandler() avant de détruire l'objet gestionnaire, de sorte que la destruction de l'objet gestionnaire n'empiète pas sur les invocations concurrentes de openUrl() qui l'utilisent.

iOS et macOS

Pour utiliser cette fonction afin de recevoir des données d'autres applications sous iOS/macOS, vous devez également ajouter le schéma personnalisé à la liste CFBundleURLSchemes dans votre fichier Info.plist :

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

Pour plus d'informations, consultez la documentation Apple Developer sur la définition d'un schéma d'URL personnalisé pour votre application.

Avertissement : Il n'est pas possible de revendiquer la prise en charge de certains schémas d'URL bien connus, notamment http et https. Cela n'est autorisé que pour les liens universels.

Pour revendiquer la prise en charge de http et https, l'entrée ci-dessus dans le fichier Info.plist n'est pas autorisée. Cela n'est possible que lorsque vous ajoutez votre domaine au fichier Entitlements :

<key>com.apple.developer.associated-domains</key>
<array>
    <string>applinks:your.domain.com</string>
</array>

iOS/macOS recherchera /.well-known/apple-app-site-association sur votre domaine, lorsque l'application sera installée. Si vous souhaitez écouter https://your.domain.com/help?topic=ABCDEF, vous devez fournir le contenu suivant dans ce fichier :

{
    "applinks": {
        "apps": [],
        "details": [{
            "appIDs" : [ "ABCDE12345.com.example.app" ],
            "components": [{
                "/": "/help",
                "?": { "topic": "?*"}
            }]
        }]
    }
}

Pour plus d'informations, voir la documentation Apple Developer Documentation for Supporting Associated Domains.

Android

Pour utiliser cette fonction afin de recevoir des données d'autres applications sur Android, vous devez ajouter un ou plusieurs filtres d'intention à l'adresse activity dans le manifeste de votre application :

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

Pour plus d'informations, voir la documentation du développeur Android pour Créer des liens profonds vers le contenu de l'application.

Pour ouvrir immédiatement le contenu correspondant dans votre application Android, sans demander à l'utilisateur de sélectionner l'application, vous devez vérifier votre lien. Pour activer la vérification, ajoutez un paramètre supplémentaire à votre filtre d'intention :

<intent-filter android:autoVerify="true">

Android recherchera https://your.domain.com/.well-known/assetlinks.json, lorsque l'application sera installée. Si vous souhaitez écouter https://your.domain.com:1337/help, vous devez fournir le contenu suivant à cet endroit :

[{
  "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"]
  }
}]

Pour plus d'informations, voir la documentation du développeur Android pour Vérifier les liens de l'application Android.

Voir également openUrl() et unsetUrlHandler().

[static] void QDesktopServices::unsetUrlHandler(const QString &scheme)

Supprime un gestionnaire d'URL précédemment défini pour l'adresse scheme spécifiée.

Appelez cette fonction avant que l'objet gestionnaire enregistré pour scheme ne soit détruit, afin d'éviter que des appels simultanés à openUrl() ne continuent d'appeler l'objet gestionnaire détruit.

Voir aussi 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.