我想创建一个移动应用程序(可能使用桌面),它使用上下文菜单,并且尽可能接近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()
}
}
答案 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