C++ 如何在rtl对齐中打开右侧的子菜单?

C++ 如何在rtl对齐中打开右侧的子菜单?,c++,qt,qml,qt-creator,qtquick2,C++,Qt,Qml,Qt Creator,Qtquick2,我有一个由项目和子菜单组成的菜单。项目的文本和标题应从右向左显示。我通过使用layoutmrirroring.enabled=true实现了这一点 Menu { id: right_menu property var rtl: true; MenuItem { text: "گزینه ۱" LayoutMirroring.enabled: true

我有一个由项目和子菜单组成的菜单。项目的文本和标题应从右向左显示。我通过使用
layoutmrirroring.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
        }
    }
这是输出:

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


如何实现这一点?

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

您可以使用
重叠
属性将子菜单移动到所需的位置

请注意,如果菜单位置过于靠近窗口的左边缘或右边缘,它仍将在另一侧打开

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
    }
}
菜单{
id:右键菜单
属性var rtl:true;
梅努伊特姆{
正文:“گزینه۱”
LayoutMirroring.enabled:true
LayoutMirroring.childrenInherit:true
}
菜单{
标题:“تنظیمت”

重叠:width*2/多亏了@JarMan,如果你只想旋转菜单,他的解决方案就解决了这个问题(就像我的例子)。但是对于从右到左的语言,更好的解决方案是让你的整个应用程序从右到左;因为在从右到左的语言中,一切都应该是这样。 为此,您可以在项目的
main.cpp
文件中添加以下行

app.setLayoutDirection(Qt::rightToLeft);
然后在任何其他项目或窗口中,添加以下行:

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

不,这不是真的。无论
layoutmrirroring
的值是什么,菜单总是在右侧打开。不,这不是真的。无论
layoutmrirroring
的值是什么,菜单总是在右侧打开。哦,很抱歉听到这个消息,我误解了,以为你想在右侧打开它德,我得继续考虑这个