如何在 rtl 对齐方式的右侧打开 sub-menu?

How to open sub-menu on right hand side in rtl alignments?

我有一个由项目和 sub-menus 组成的菜单。项目的文本和标题应从右到左显示。我通过使用 LayoutMirroring.enabled = true.

实现了这一点
    Menu {
        id: right_menu
        property var rtl: true;

        MenuItem {
            text: "گزینه ۱"
            LayoutMirroring.enabled: true
            LayoutMirroring.childrenInherit: true
        }

        Menu {
            title: "تنظیمات"

            MenuItem {
                LayoutMirroring.enabled: true
                LayoutMirroring.childrenInherit: true
                text: "گزینه ۱"
            }

            MenuItem {
                LayoutMirroring.enabled: true
                LayoutMirroring.childrenInherit: true
                text: "گزینه ۱"
            }
        }

        delegate: MenuItem {
            LayoutMirroring.enabled: true
            LayoutMirroring.childrenInherit: true
        }
    }

这是输出:

但是,这不是有效输出,我想强制菜单在 right-hand 侧而不是左侧打开子菜单。这是我正在寻找的输出:

我怎样才能做到这一点?

我怀疑 LayoutMirroring 导致您的子菜单在错误的位置弹出。不要使用 LayoutMirroring 来实现您想要的文本格式,而是使用自定义文本组件并在那里编辑文本的对齐方式。

您可以使用 overlap 属性 将子菜单移动到您想要的位置。

请注意,如果菜单的位置太靠近window的左边缘或右边缘,它仍然会在对面打开。

Menu {
    id: right_menu
    property var rtl: true;

    MenuItem {
        text: "گزینه ۱"
        LayoutMirroring.enabled: true
        LayoutMirroring.childrenInherit: true
    }

    Menu {
        title: "تنظیمات"
        overlap: width * 2  // <<-- Shift the submenu over

        MenuItem {
            LayoutMirroring.enabled: true
            LayoutMirroring.childrenInherit: true
            text: "گزینه ۱"
        }

        MenuItem {
            LayoutMirroring.enabled: true
            LayoutMirroring.childrenInherit: true
            text: "گزینه ۱"
        }
    }

    delegate: MenuItem {
        LayoutMirroring.enabled: true
        LayoutMirroring.childrenInherit: true
    }
}

感谢@JarMan,如果只是想旋转菜单(就像我的情况),他的解决方案解决了这个问题。但是对于从右到左的语言,一个更好的解决方案是让你的整个应用程序从右到左;因为在从右到左的语言中,一切都应该以这种方式进行。 为此,您可以在项目的 main.cpp 文件中添加以下行。

app.setLayoutDirection(Qt::rightToLeft);

然后在任何其他项目或 window 中添加以下行:

LayoutMirroring.enabled: Qt.application.layoutDirection == Qt.RightToLeft
LayoutMirroring.childrenInherit: Qt.application.layoutDirection == Qt.RightToLeft