Qt 如何在QML中使用助记符字符串设置MenuBarItem的样式
我想在我的Qt应用程序中自定义菜单栏(来自QtQuick.Controls 2.4),所以我遵循了Qt网站()中的示例 但是,该示例不包含助记符。下面是我的菜单栏代码,它有助于记忆:Qt 如何在QML中使用助记符字符串设置MenuBarItem的样式,qt,qml,qtquick2,qtquickcontrols2,Qt,Qml,Qtquick2,Qtquickcontrols2,我想在我的Qt应用程序中自定义菜单栏(来自QtQuick.Controls 2.4),所以我遵循了Qt网站()中的示例 但是,该示例不包含助记符。下面是我的菜单栏代码,它有助于记忆: import QtQuick 2.9 import QtQuick.Controls 2.4 import QtQuick.Layouts 1.11 import "../singletons" MenuBar { Menu { title: qsTr("&File")
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
}
}
}
当我运行代码时,菜单栏项如下所示(但助记符快捷方式仍然有效):
如果没有样式,菜单栏项将按预期在下面加下划线:
我找不到关于这个问题的任何信息。有没有什么方法或解决方法可以让我保留这些助记符并定制外观?看起来像个bug。本机元素使用了一些不可访问的私有控件(请参见)。使用
标签
也不能解决问题。因此,解决方案是避免项目定制,或使用一些愚蠢的解决方法,如:
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
}
}
委托:菜单准则{
id:menuBarItem
函数替换文本(txt)
{
var index=txt.indexOf(&);
如果(索引>=0)
txt=txt.replace(txt.substr(索引,2),(“+txt.substr(索引+1,1)+”);
返回txt;
}
contentItem:标签{
text:replaceText(menuBarItem.text)
颜色:“白色”
垂直对齐:Text.AlignVCenter
Text格式:Text.RichText
}
}
是否报告了错误,或者我是否应该报告错误?无论如何,谢谢你的解决办法。