如何在 Ubuntu Touch QML 中接收对自定义 URL 处理程序的调用

如何在 Ubuntu Touch QML 中接收对自定义 URL 处理程序的调用

我有一个 QML 应用程序需要对自定义 URL 处理程序调用做出反应,例如“myapp://something”。我知道我需要在我的 *.desktop 文件中注册 URL 处理程序,如下所示:

MimeType=x-scheme-handler/myapp;

但是我不知道在 QML 中哪里可以接收对此处理程序的调用。有人能帮助我吗?

谢谢。

答案1

14.04 解决方案(Easy,仅限 QML)

以下 QML 代码可在 14.04 上运行仅有的因为它需要Qt >= 5.1(并且 Trusty 提供5.2.1)。

您可以拥有一个.desktop包含以下内容的文件:

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

并用于Qt.application.arguments[1]接收URL内容。

13.10 的解决方案(需要 C++)

.desktop 文件与前一个文件非常相似,但这里qmlscene被应用程序的名称替换了:

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

对于 13.10,您必须使用一些 C++ 并使用这种类型的应用程序解析参数:

#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();
}

您将能够通过 setContextProperty() 从 QML 获取 url。

访问使用上下文属性将 C++ 对象嵌入到 QML 中了解更多详情。

相关内容