如何在 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
我有一个由项目和 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