我有一个 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 中了解更多详情。