如何在 QML 中使用助记字符串设置 MenuBarItem 的样式
How to style MenuBarItem with mnemonics strings in QML
我想在我的 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 项的助记字符按预期加下划线:
我找不到关于这个问题的任何信息。有什么方法或解决方法可以让我保留助记符并自定义外观吗?
看起来像一个错误。本机元素使用一些私有控件 IconLabel which isn't accessible ( see it 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
}
}
我想在我的 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 项的助记字符按预期加下划线:
我找不到关于这个问题的任何信息。有什么方法或解决方法可以让我保留助记符并自定义外观吗?
看起来像一个错误。本机元素使用一些私有控件 IconLabel which isn't accessible ( see it 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
}
}