我正在开发一个多语言应用程序,包括rtl种语言.使用Menu控件时,它们不遵循我的顶级ApplicationWindow中的LayoutMirroring.enabled设置.

在从左到右模式下,一切看起来都很正常:

enter image description here

但在从右到左的模式下,它并不像预期的那样工作.它仍然会打开右侧的菜单,并以此方式为其设置动画.

enter image description here

And this is what I would expect: enter image description here

代码如下:

import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Material

ApplicationWindow {
    id: root

    property bool mirroringEnabled: false

    LayoutMirroring.enabled: mirroringEnabled
    LayoutMirroring.childrenInherit: true

    width: 640
    height: 480
    visible: true

    menuBar: MenuBar {
        Menu {
            id: someMenu
            title: qsTr("&File")
            Action { text: qsTr("&New...") }
        }
        Menu {
            title: qsTr("&Edit")
            Action { text: qsTr("Cu&t") }
        }
        Menu {
            title: qsTr("&Help")
            Action { text: qsTr("&About") }
        }
    }

    Button {
        text: `mirror layout: ${root.mirroringEnabled}`
        anchors.centerIn: root.contentItem

        onClicked: {
            console.log("---")
            console.log("Before:     Menu mirrored:", someMenu.mirrored, "<-")
            console.log("Before: Mirroring enabled:", root.mirroringEnabled)
            root.mirroringEnabled = !root.mirroringEnabled
            console.log("After:     Menu mirrored:", someMenu.mirrored, "<-")
            console.log("After: Mirroring enabled:", root.mirroringEnabled)
        }
    }

}

以及让它运行的代码:

from PySide6.QtCore import QUrl
from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtWidgets import QApplication

if __name__ == '__main__':
    app = QApplication([])
    engine = QQmlApplicationEngine()

    engine.load(QUrl.fromLocalFile('window.qml'))

    if not engine.rootObjects():
        sys.exit(-1)

    app.exec()

我试过的东西:

  • 在菜单上显式设置parent属性会使其向正确的一侧打开,但会完全扰乱定位
  • QApplicationQGuiApplication也不行

如有任何帮助,将不胜感激!提前感谢您:)

推荐答案

我在他们的虫子追踪器里打开了a bug个.在问题得到解决之前,我将基于@SMR的 idea 使用我的变通方法:

Menu {

    readonly property bool mMirrored: root.count > 0 && itemAt(0).mirrored

    x: mMirrored ? -width + parent.width : 0
}

因此,因为mirrored属性在菜单本身上不起作用,所以我们从第一项开始查找它:)

Python相关问答推荐

在np数组上实现无重叠的二维滑动窗口

多处理队列在与Forking http.server一起使用时随机跳过项目

isinstance()在使用dill.dump和dill.load后,对列表中包含的对象失败

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

matplotlib + python foor loop

如何排除prefecture_related中查询集为空的实例?

Flask运行时无法在Python中打印到控制台

Polars map_使用多处理对UDF进行批处理

将一个双框爆炸到另一个双框的范围内

mdates定位器在图表中显示不存在的时间间隔

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

如何在一组行中找到循环?

为什么我只用exec()函数运行了一次文件,而Python却运行了两次?

如何在python tkinter中绑定键盘上的另一个回车?

如何将验证器应用于PYDANC2中的EACHY_ITEM?

如何在Python中画一个只能在对角线内裁剪的圆?

正则表达式反向查找

保存由PYTHON在EXCEL中所做更改的问题

这是什么排序算法?(将迭代器与自身合并&&Q;)

为什么任何一个HTML页面在保存到文件后都会变大6个字节?