Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何在QML中使用助记符字符串设置MenuBarItem的样式_Qt_Qml_Qtquick2_Qtquickcontrols2 - Fatal编程技术网

Qt 如何在QML中使用助记符字符串设置MenuBarItem的样式

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")

我想在我的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")
        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
}
}

是否报告了错误,或者我是否应该报告错误?无论如何,谢谢你的解决办法。