Я создал компонент кнопки QML и использовал компонент с именем ColorImage
для иконы. После поиска способа изменить цвет изображения. Я узнал, что Qt больше не поддерживает ColorOverlay
Наведите курсор, я просто набрал "цвет" в Qt Design Studio и ColorImage
выскочил. Я попытался найти документацию в Интернете, но ничего не смог найти. Однако, когда я решил попробовать, это сработало именно так, как я и ожидал:
Это соответствующий код с моей кнопки:
contentItem: ColorImage {
id: buttonIcon
source: imageSource
fillMode: Image.PreserveAspectFit
height: parent.height
color: iconColor
anchors.fill: actionBarButton
anchors.margins: 4
}
Когда hovered
состояние с помощью кнопки становится true
это позволяет получить следующее состояние:
State {
when: (hovered && !checked)
name: "hoveredNotChecked"
PropertyChanges {
target: buttonIcon
color: "white"
}
PropertyChanges {
target: buttonBackground
color: iconColor
}
},
который меняет местами значок и цвет фона на кнопке.
Это работает в предварительном просмотре Qt Designer. Однако, когда я пытаюсь запустить его из Pyside, он сообщает мне: ColorImage is not a type
и просто не удается загрузить кнопку.
Я попытался найти документацию по ColorImage
чтобы выяснить, может быть, чего-то не хватает в импорте. Однако я ничего не смог обнаружить. Внутренняя справка Qt Designer также ничего не дала. Как будто этого компонента не существует. Но это так, и он работает в дизайн-студии.
Вот полный код моей кнопки:
Button {
id: actionBarButton
property color iconColor: "red"
property color backgroundColor: "blue"
property string toolTipText: "Play video!"
property string imageSource: "images/round_play_arrow_white_36dp.png"
property string imageSourceChecked: "images/round_play_arrow_white_36dp.png"
states: [
State {
when: (hovered && !checked)
name: "hoveredNotChecked"
PropertyChanges {
target: buttonIcon
color: "white"
}
PropertyChanges {
target: buttonBackground
color: iconColor
}
},
State {
when: (hovered && checked)
name: "hoveredChecked"
PropertyChanges {
target: buttonIcon
source: imageSourceChecked
color: "white"
}
PropertyChanges {
target: buttonBackground
color: iconColor
}
},
State {
when: checked
name: "checked"
PropertyChanges {
target: buttonIcon
source: imageSourceChecked
}
}
]
transitions: Transition {
ColorAnimation {
duration: 300
}
}
contentItem: ColorImage {
id: buttonIcon
source: imageSource
fillMode: Image.PreserveAspectFit
height: parent.height
color: iconColor
anchors.fill: actionBarButton
anchors.margins: 4
}
onHoveredChanged: {
}
background: Rectangle {
id: buttonBackground
color: backgroundColor
anchors.fill: actionBarButton
}
ToolTip.delay: 1000
ToolTip.timeout: 5000
ToolTip.visible: hovered
ToolTip.text: actionBarButton.toolTipText
}
Вот как это выглядит в конструкторе:
Может кто-нибудь помочь мне понять, почему он жалуется на ColorImage
не в моем вкусе, когда я пытаюсь запустить?
Редактировать:
Импорт в файле выше:
import QtQuick 2.15
import QtQuick.Controls 2.15