如何在 QML 中使用助记符字符串设置 MenuBarItem 的样式
Posted
技术标签:
【中文标题】如何在 QML 中使用助记符字符串设置 MenuBarItem 的样式【英文标题】:How to style MenuBarItem with mnemonics strings in QML 【发布时间】:2019-02-17 18:39:03 【问题描述】:我想在我的 Qt 应用程序中自定义 MenuBar(来自 QtQuick.Controls 2.4),所以我按照 Qt 网站 (https://doc.qt.io/qt-5/qtquickcontrols2-customize.html#customizing-menubar) 中的示例进行操作。
但是,该示例不包含助记符。这是我的带有助记符的 MenuBar 代码:
import QtQuick 2.9
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
import "../singletons"
MenuBar
Menu
title: qsTr("&File")
Action text: qsTr("&Open...")
Action text: qsTr("&Save")
Action text: qsTr("Save &As...")
MenuSeparator
Action text: qsTr("&Quit")
Menu
title: qsTr("&Edit")
Action text: qsTr("Cu&t")
Action text: qsTr("&Copy")
Action text: qsTr("&Paste")
Menu
title: qsTr("&Help")
Action text: qsTr("&About")
background: Rectangle
color: Style._ColorPrimaryDark
delegate: MenuBarItem
id: menuBarItem
contentItem: Text
text: menuBarItem.text
opacity: enabled ? 1.0 : 0.3
color: "white"
verticalAlignment: Text.AlignVCenter
当我运行代码时,MenuBar 项看起来像这样(但助记符快捷方式仍然有效):
没有样式,MenuBar 项目的助记符按预期加下划线:
我找不到有关此问题的任何信息。有什么办法或解决方法让我可以保留助记符并自定义外观?
【问题讨论】:
【参考方案1】:看起来像一个错误。本机元素使用一些无法访问的私有控件IconLabel(参见here)。使用Label
也不能解决问题。所以解决方案是避免项目自定义,或者使用一些愚蠢的解决方法,如下所示:
delegate: MenuBarItem
id: menuBarItem
function replaceText(txt)
var index = txt.indexOf("&");
if(index >= 0)
txt = txt.replace(txt.substr(index, 2), ("<u>" + txt.substr(index + 1, 1) +"</u>"));
return txt;
contentItem: Label
text: replaceText(menuBarItem.text)
color: "white"
verticalAlignment: Text.AlignVCenter
textFormat: Text.RichText
【讨论】:
这个错误是报告了还是我应该报告?无论如何,感谢您的解决方法。以上是关于如何在 QML 中使用助记符字符串设置 MenuBarItem 的样式的主要内容,如果未能解决你的问题,请参考以下文章