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

时间:2020-10-31 18:52:04

标签: c++ qt qml qt-creator qtquick2

我有一个菜单,其中包含项目和子菜单。项目的文本和标题应从右到左显示。我通过使用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
        }
    }

这是输出:

wrong output

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

expected output

我该如何实现?

3 个答案:

答案 0 :(得分:3)

您可以使用overlap属性将子菜单移至所需位置。

请注意,如果菜单的位置距离窗口的左边缘或右边缘太近,它将在另一侧打开。

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
    }
}

答案 1 :(得分:1)

由于@JarMan,他的解决方案解决了如果只想旋转菜单的问题(就像我这样)。但是从右到左语言的一个更好的解决方案是使整个应用程序从右到左。因为使用从右到左的语言,所有内容都应采用这种方式。 为此,您可以在项目的import UIKit class ViewController: UIViewController, UITextFieldDelegate { @IBOutlet weak var valueVcc: UITextField! @IBOutlet weak var valueBeta: UITextField! @IBOutlet weak var valueR1: UITextField! @IBOutlet weak var valueR2: UITextField! @IBOutlet weak var valueRc: UITextField! @IBOutlet weak var valueRe: UITextField! @IBOutlet weak var valueVce: UITextField! @IBOutlet weak var results: UITextField! var Ic = -1 // set initial value for Ic //var R1 = Float(valueR1.text) // var R2 = Float(valueR2.text) // var Vcc = Float(valueVcc.text) // var Vb = (Vcc * (R1 / (R1 + R2))) @IBAction func buttonR1R2(_ sender: UIButton) { var ans = (Float(valueR1.text) / Float(valueR2.text)) // error on this line if (!valueR1.text!.isEmpty && !valueR2.text!.isEmpty && !valueVcc.text!.isEmpty) { results.text = "Values Entered" } else { results.text = "Enter some values for Vcc,R1 and R2" }// end of if statement } //end of func buttonR1R2 @IBAction func buttonIcCalc(_ sender: UIButton) { } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } } 文件中添加以下行。

main.cpp

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

app.setLayoutDirection(Qt::rightToLeft);

答案 2 :(得分:0)

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

相关问题