gpt4 book ai didi

qt - 如何更改 MenuBar 的字体颜色?

转载 作者:行者123 更新时间:2023-12-04 13:31:41 27 4
gpt4 key购买 nike

如何更改 QML 菜单项的文本颜色 MenuBar ?

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
import QtQuick.Dialogs 1.2
import QtQuick.Controls.Styles 1.3 as QtQuickControlStyle

ApplicationWindow {
title: qsTr("Test")
width: 640
height: 480
visible: true

property color menuBackgroundColor: "#3C3C3C"
property color menuBorderColor: "#282828"

menuBar: MenuBar {

style: QtQuickControlStyle.MenuBarStyle {
padding {
left: 8
right: 8
top: 3
bottom: 3
}
background: Rectangle {
border.color: menuBorderColor
color: menuBackgroundColor
}
// font: // how to set font color to red?
// textColor: "red" /* does not work - results in Cannot assign to non-existent property "textColor" */
TextField { // does also not work
style: TextFieldStyle {
textColor: "red"
}
}
}
}
}

有人问过类似的问题 here但它似乎不适用于菜单项。

最佳答案

你必须重新定义 itemDelegate itemDelegate.label menuStyle .前者定义了MenuBar的样式text 而后者定义菜单项文本的样式。

在下面的例子中,我为 MenuBar 定义了一个完整的样式和 Menu s,不仅为他们的文字。 scrollIndicator 是这里唯一缺少的部分。它可以表示为 Text/LabelImage .

import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Controls.Styles 1.3
import QtQuick.Window 2.2

ApplicationWindow {
title: qsTr("Test")
width: 640
height: 480
visible: true

property color menuBackgroundColor: "#3C3C3C"
property color menuBorderColor: "#282828"

menuBar: MenuBar {

Menu {
title: "File"
MenuItem { text: "Open..." }
MenuItem { text: "Close" }
}

Menu {
title: "Edit"
MenuItem { text: "Cut"; checkable: true}
MenuItem { text: "Copy" }
MenuItem { text: "Paste" }
MenuSeparator {visible: true }
Menu {
title: "submenu"
}
}

style: MenuBarStyle {

padding {
left: 8
right: 8
top: 3
bottom: 3
}

background: Rectangle {
id: rect
border.color: menuBorderColor
color: menuBackgroundColor
}

itemDelegate: Rectangle { // the menus
implicitWidth: lab.contentWidth * 1.4 // adjust width the way you prefer it
implicitHeight: lab.contentHeight // adjust height the way you prefer it
color: styleData.selected || styleData.open ? "red" : "transparent"
Label {
id: lab
anchors.horizontalCenter: parent.horizontalCenter
color: styleData.selected || styleData.open ? "white" : "red"
font.wordSpacing: 10
text: styleData.text
}
}

menuStyle: MenuStyle { // the menus items
id: goreStyle

frame: Rectangle {
color: menuBackgroundColor
}

itemDelegate {
background: Rectangle {
color: styleData.selected || styleData.open ? "red" : menuBackgroundColor
radius: styleData.selected ? 3 : 0
}

label: Label {
color: styleData.selected ? "white" : "red"
text: styleData.text
}

submenuIndicator: Text {
text: "\u25ba"
font: goreStyle.font
color: styleData.selected || styleData.open ? "white" : "red"
styleColor: Qt.lighter(color, 4)
}

shortcut: Label {
color: styleData.selected ? "white" : "red"
text: styleData.shortcut
}

checkmarkIndicator: CheckBox { // not strinctly a Checkbox. A Rectangle is fine too
checked: styleData.checked

style: CheckBoxStyle {

indicator: Rectangle {
implicitWidth: goreStyle.font.pixelSize
implicitHeight: implicitWidth
radius: 2
color: control.checked ? "red" : menuBackgroundColor
border.color: control.activeFocus ? menuBackgroundColor : "red"
border.width: 2
Rectangle {
visible: control.checked
color: "red"
border.color: menuBackgroundColor
border.width: 2
radius: 2
anchors.fill: parent
}
}
spacing: 10
}
}
}

// scrollIndicator: // <--- could be an image

separator: Rectangle {
width: parent.width
implicitHeight: 2
color: "white"
}
}
}
}
}

这是结果 MenuBarMenu s:

enter image description here

您也可以选择设置 MenuStyle直接在 Menu 内,在 style属性(property)。像这样的东西:
Menu {
title: "File"
MenuItem { text: "Open..." }
MenuItem { text: "Close" }

style: MenuStyle {
itemDelegate.label: Label {
color: "blue"
text: styleData.text

// stuff above here
}
}

在最后一个示例中,只有"file" Menu项目的样式带有 blue文本的颜色。不过,人们可以争论这会有多丑陋。

关于qt - 如何更改 MenuBar 的字体颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31856207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com