【问题标题】:best way to get source URL of custom iOS scheme in QML在 QML 中获取自定义 iOS 方案的源 URL 的最佳方法
【发布时间】:2015-03-03 00:41:59
【问题描述】:

我是 Qt 和 QML 的新手,我正在尝试构建我的第一个 iOS 应用程序。我需要获取我在 info.plist (myApp://) 中定义的自定义 URL 方案的内容。当我打开任何 url myApp://xyz 时,URL 方案有效并且应用程序打开。现在我需要获取 URL 的内容(xyz)。

过去几天尝试这样做但没有成功,也没有找到关于如何做到最好的好手册,我在这里问。到目前为止我所理解的:有些人创建自己的应用程序委托。 github 上很少有使用旧 Qt 版本(我使用 5.4)的示例,但我没有设法将它们集成到我的应用程序中,而且对于这个简单的事情来说似乎相当复杂。此外,正如我在这里看到的那样:https://github.com/qtproject/qtbase/blob/stable/src/plugins/platforms/ios/qiosapplicationdelegate.mm 该 URL 已经以某种方式由 Qt 处理。我不确定 Qt 桌面服务 http://doc.qt.io/qt-5/QDesktopServices.html 是否可以处理它,但(似乎)它不适用于 QML。

最好的方法是什么?非常感谢。

【问题讨论】:

    标签: ios qt qml


    【解决方案1】:

    我终于使用 QDesktopServices 和一个用于 QML 的信号让它工作了。

    HandleURL.h

    #include <QDesktopServices>
    
    #ifndef HANDLEURL
    #define HANDLEURL
    
    class HandleURL : public QObject
    {
        Q_OBJECT
    
    signals:
        void incomingURL(QString path);
    
    public slots:
         void handleURL(const QUrl &url);
    };
    
    #endif
    

    HandleURL.cpp 发出信号

    void HandleURL::handleURL(const QUrl &url)
    {
       emit incomingURL(url.toString());
    }
    

    在 main.cpp 中,设置 URLHandler 并创建 QML 上下文属性

    HandleURL *URLHandler = new HandleURL();
    QDesktopServices::setUrlHandler("myscheme", URLHandler, "handleURL");
    engine.rootContext()->setContextProperty("URLHandler", URLHandler);
    

    在 QML 中,监听 Signal

    Connections{
                target: URLHandler;
                onIncomingURL: { console.log("Incoming Signal: "+path)
                }
            }
    

    plist.info

    <key>CFBundleURLTypes</key>
        <array>
            <dict>
                <key>CFBundleURLName</key>
                <string>com.myorg.mobile1</string>
                <key>CFBundleURLSchemes</key>
                <array>
                    <string>myscheme</string>
                </array>
            </dict>
        </array>
    

    【讨论】:

    • 它在哪个操作系统上工作?对我来说似乎不适用于 OSX
    • 我只在 iOS 上进行了测试(最后我们放弃了 Qt 并使用了 Swift,所以我不再运行它了)。但也许这有帮助:superuser.com/questions/548119/…
    猜你喜欢
    • 1970-01-01
    • 2014-04-02
    • 2014-10-22
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多