Sur cette page

QDesktopServices Class

La classe QDesktopServices fournit des méthodes permettant d'accéder aux services de bureau courants. En savoir plus...

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 que les applications peuvent utiliser 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 pour les applications.

Cette classe contient des fonctions qui fournissent des interfaces simples vers ces services, indiquant si ceux-ci ont abouti ou échoué.

La fonction openUrl() sert à ouvrir des fichiers situés à des URL arbitraires dans des applications externes. Pour les URL correspondant à des ressources du système de fichiers local (où le schéma d'URL est « file »), une application adaptée sera utilisée pour ouvrir le fichier ; dans le cas contraire, 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 consultation 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 provenant 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 chaque schéma d’URL afin de permettre aux applications de remplacer le comportement de gestion par défaut pour certains types d’URL.

Le mécanisme de répartition n’autorise l’utilisation que d’un seul gestionnaire personnalisé par schéma d’URL ; celui-ci est défini à l’aide de la fonction ` setUrlHandler()`. Chaque gestionnaire est implémenté sous la forme d’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()`. Cela rétablit le comportement par défaut pour le schéma concerné.

Ce système facilite notamment la mise en place d’un système d’aide. L’aide peut être fournie dans les étiquettes et les navigateurs textuels à l’aide d’URL de type ` help://myapplication/mytopic `, et l’enregistrement d’un gestionnaire permet d’afficher le texte d’aide au sein même de l’application :

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

Si, au sein du gestionnaire, vous constatez que vous ne pouvez pas ouvrir l’URL demandée, il vous suffit d’appeler à nouveau la fonction ` QDesktopServices::openUrl()` avec le même argument ; celle-ci tentera alors d’ouvrir l’URL en utilisant le mécanisme approprié à l’environnement de bureau de l’utilisateur.

Associé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 ouvre la voie à des liens profonds vers des applications ou à un mécanisme d’interprocessus (IPC) très basique basé sur les URL.

Voir également QSystemTrayIcon, QProcess et QStandardPaths.

Documentation des fonctions membres

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

Ouvre l'url indiquée dans le navigateur Web adapté à l'environnement de bureau de l'utilisateur et renvoie true en cas de réussite ; sinon, renvoie false.

Si l'URL fait référence à un fichier local (c'est-à-dire si le schéma d'URL est « file »), celui-ci sera ouvert avec une application adaptée plutôt qu'avec un navigateur Web.

L'exemple suivant ouvre un fichier du système de fichiers Windows situé dans un chemin d'accès contenant des espaces :

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

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

Par exemple, l’URL suivante contient un destinataire (user@foo.com), un objet (Test) et le corps du 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 prennent en charge Unicode, il se peut que l’utilisateur ait configuré son client sans ces fonctionnalités. De plus, certains clients de messagerie (par exemple, Lotus Notes) rencontrent des problèmes avec les URL longues.

Avertissement : une valeur de retour de type « true » indique que l'application a réussi à demander au système d'exploitation d'ouvrir l'URL dans une application externe. Il se peut toutefois que l'application externe ne parvienne pas à se lancer ou à ouvrir l'URL demandée. Ce résultat ne sera pas signalé à l'application.

Avertissement : les URL transmises à cette fonction sous iOS ne se chargeront pas à moins que leurs schémas ne figurent dans la clé LSApplicationQueriesSchemes du fichier Info.plist de l’application. Pour plus d’informations, consultez la documentation des développeurs Apple relative à canOpenURL:. Par exemple, les lignes suivantes autorisent les URL utilisant le schéma HTTPS :

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

Remarque : sous Android Nougat (SDK 24) et versions ultérieures, les URL utilisant le schéma file sont ouvertes à l’aide de FileProvider, qui tente d’abord d’obtenir une URI partageable de type content. C’est pourquoi Qt pour Android définit un fournisseur de fichiers doté de l’autorisation ${applicationId}.qtprovider, où applicationId correspond au nom du paquet de l’application afin d’éviter tout conflit de noms. Pour plus d’informations, consultez également la section Configuration du partage de fichiers.

Voir également setUrlHandler().

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

Définit le gestionnaire de l'scheme on indiquée comme étant le gestionnaire method fourni par l'objet receiver.

Cette fonction permet de personnaliser le comportement de ` openUrl()`. Si ` openUrl()` est appelée avec une URL contenant l'` scheme ` spécifié, alors la méthode ` method ` de l'objet ` receiver ` est appelée à la place de ` QDesktopServices `, qui lance une application externe.

La méthode fournie doit être implémentée sous la forme d’un slot n’acceptant 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 disposant déjà d'un gestionnaire, le gestionnaire existant est simplement remplacé par le nouveau. Étant donné qu'QDesktopServices ne prend pas possession des gestionnaires, aucun objet n'est supprimé lorsqu'un gestionnaire est remplacé.

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

Vous devez appeler ` unsetUrlHandler()` avant de détruire l'objet gestionnaire, afin que la destruction de cet objet ne chevauche pas les invocations simultanées de ` openUrl()` qui l'utilisent.

iOS et macOS

Pour utiliser cette fonction afin de recevoir des données provenant d’autres applications sous iOS/macOS, vous devez également ajouter le schéma personnalisé à la liste des « 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 des développeurs Apple intitulée « Définir 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 déclarer 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 si 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 le fichier /.well-known/apple-app-site-association sur votre domaine lors de l’installation de l’application. Si vous souhaitez être accessible via https://your.domain.com/help?topic=ABCDEF, vous devez y fournir le contenu suivant :

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

Pour plus d’informations, consultez la documentation Apple pour les développeurs consacrée à la prise en charge des domaines associés.

Android

Pour utiliser cette fonctionnalité afin de recevoir des données provenant d’autres applications sur Android, vous devez ajouter un ou plusieurs filtres d’intention à la balise « 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, consultez la documentation des développeurs Android consacrée à la création de liens profonds vers le contenu d’une application.

Pour ouvrir immédiatement le contenu correspondant dans votre application Android, sans que l’utilisateur ait à 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 y fournir le contenu suivant :

[{
  "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, consultez la documentation des développeurs Android consacrée à la vérification des liens vers les applications 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'scheme spécifié.

Appelez cette fonction avant que l’objet gestionnaire enregistré pour scheme ne soit détruit, afin d’empêcher que des appels simultanés à openUrl() ne continuent à faire appel à l’objet gestionnaire détruit.

Voir également 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.