带有上下文菜单的QML移动应用

时间:2014-01-24 23:13:43

标签: android ios qt contextmenu qml

我想创建一个移动应用程序(可能使用桌面),它使用上下文菜单,并且尽可能接近Android和iOS的原生外观。 (这是我第一次涉足Qt和QML。)

我想出了如何创建Menu并调用myMenu.popup()来显示上下文菜单。在Android中,此上下文菜单看起来非常类似于本机Android上下文菜单。此上下文菜单在桌面上看起来也是原生的。问题来自iOS。

iOS与称为actionsheets的上下文菜单有类似的概念。 Examples.但contextMenu看起来就像一个漂浮在窗口上的Windows上下文菜单(右键菜单)。

TL;博士;

在iOS设备上运行时,有没有办法让qml中的Menu看起来与iOS操作表类似?我今天搜索了几个小时,找不到任何东西。

Menu代码主要是从Qt文档复制的,只是为了看看事情的外观和工作方式

Menu
{
    id: myContextMenu
    title: "Edit"

        MenuItem {
            text: "Cut"
            onTriggered: {console.log("cut")}
        }

        MenuItem {
            text: "Copy"
            onTriggered: {console.log("copy")}
        }

        MenuItem {
            text: "Paste"
            onTriggered: {console.log("paste")}
        }

        MenuSeparator { }

        Menu {
            title: "More Stuff"

            MenuItem {
                text: "Do Nothing"
            }
        }
}
MouseArea {
      id: longPressArea
      anchors.fill: text
      onClicked: {
          myContextMenu.popup()
      }
    }

2 个答案:

答案 0 :(得分:0)

总结上面的评论:不,不是在当前版本的Qt中,除非你在QML中推出自己的。

快速控件使用[native,QWidget,QML]实现之一,无论哪个先找到。您可以阅读源代码,看看没有本机实现:在Qt /../ Src / qtbase / src / plugins / platforms / ios中的grep for createPlatformMenu()。那就是适用于本机小部件的适配器。

另一个答案是:您可以通过为iOS的本机小部件创建适配器(如果您是iOS和C ++程序员)来做出贡献。还假设UIActionSheet是适合的小部件(看起来如此。)

我想你关心的是一个居中的菜单(而不是像抽屉一样动画地滑到屏幕上的本地菜单,感觉)不符合HIG(或者样式/外观是错误的。)那是一个移动目标。 showInView下的iOS8 documentation似乎说中心的弹出菜单是一个选项(至少在iPad上,它不清楚它是否适用于手机。)而且模糊了商店拒绝的内容。

这不是QML的预期好处:您可以为平板电脑和手机提供不同的皮肤吗?

答案 1 :(得分:0)

有了Qt Labs,从Qt5.8开始,您可以在macOS,iOS,Android和Linux(gtk +)上获得本机外观的菜单。我自己还没有尝试过,但是您可以看一下: https://doc.qt.io/qt-5.12/qml-qt-labs-platform-menu.html

您需要import Qt.labs.platform 1.1,使用QT += widgets链接到小部件,并使用QApplication而不是QGuiApplication

为了进行比较,这也是qml的稳定菜单,它不会尝试显示本机。 https://doc.qt.io/qt-5.12/qml-qtquick-controls2-menu.html