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