web-dev-qa-db-fra.com

Comment recevoir un appel au gestionnaire d'URL personnalisé dans Ubuntu Touch QML

J'ai une application QML qui doit réagir à un appel de gestionnaire d'URL personnalisé, comme "myapp: // quelque chose". Je sais que je dois enregistrer le gestionnaire d'URL dans mon fichier * .desktop en tant que:

MimeType=x-scheme-handler/myapp;

Cependant, je ne sais pas où recevoir l'appel à ce gestionnaire en QML. Est-ce que quelqu'un peut m'aider?

Merci.

2
ali

Solution pour 14.04 (Easy, QML uniquement)

Le code QML suivant fonctionnera uniquement sur 14.04 car il nécessite Qt >= 5.1 (et Trusty fournit 5.2.1).

Vous pouvez avoir un .desktop fichier contenant:

Exec=/usr/bin/qmlscene %U /path/to/your/qml-app/myapp.qml
MimeType=x-scheme-handler/myapp

et utilise Qt.application.arguments[1] pour recevoir le contenu de l'URL.

Solution pour 13.10 (nécessite C++)

Le fichier .desktop est très similaire au précédent mais ici qmlscene est remplacé par le nom de votre application:

Exec=/path/to/your/binary_app %U 
MimeType=x-scheme-handler/myapp

Pour 13.10, vous devrez utiliser du C++ et analyser les arguments en utilisant ce type d'application:

#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
#include <QQmlContext>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QtQuick2ApplicationViewer viewer;

    // Register the URL with the QML runtime
    viewer.rootContext()->setContextProperty("url", app.arguments().at(1));

    // Now, load the main page
    viewer.setMainQmlFile(QStringLiteral("qml/myapp.qml"));
    viewer.showExpanded();
    return app.exec();
}

Vous pourrez obtenir l'url de QML grâce à setContextProperty ().

Visitez Incorporation d'objets C++ dans QML avec des propriétés de contexte pour plus de détails.

1
Sylvain Pineau