Qt, QML, ColorImage no es un tipo de

0

Pregunta

He hecho una QML componente button y he utilizado un componente denominado ColorImage para el icono. Después de buscar una forma de cambiar el color de la imagen. Me enteré de que Qt no apoyo ColorOverlay

Hover, me acaba de escribir en 'color' en Qt Estudio de Diseño y ColorImage apareció. Traté de encontrar la documentación en línea, pero no pudo encontrar nada. Sin embargo, cuando me decidí a probarlo, funciona como yo esperaba:

Este es el código de mi botón:

    contentItem: ColorImage {
        id: buttonIcon
        source: imageSource
        fillMode: Image.PreserveAspectFit
        height: parent.height
        color: iconColor
        anchors.fill: actionBarButton
        anchors.margins: 4
    }

Cuando el hovered estado del botón se convierte en true permite que el siguiente estado:

State {
            when: (hovered && !checked)
            name: "hoveredNotChecked"
            PropertyChanges {
                target: buttonIcon
                color: "white"
            }

            PropertyChanges {
                target: buttonBackground
                color: iconColor
            }
        },

que se intercambia el icono y el color de fondo del botón.

Esto funciona en la vista previa de la Qt Designer. Sin embargo, cuando intento ejecutarlo desde Pyside, me dice: ColorImage is not a type y simplemente no se puede cargar en el botón.

Traté de encontrar documentación sobre ColorImage para averiguar que tal vez hay una importación falta. Sin embargo, no pude subir nada. Qt Designer ayuda interna no algo así. Es como si este componente no existe. Pero lo hace, y se trabaja en el Estudio de Diseño.

Aquí está el código completo para mi botón:

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
}

Así es como se ve en el diseñador: Here is how it looks in the designer

Alguien me puede ayudar a averiguar por qué se queja acerca de ColorImageno siendo un tipo cuando lanzo?

Editar:

Las importaciones en el archivo de arriba:

import QtQuick 2.15
import QtQuick.Controls 2.15
pyside2 qml qt
2021-11-14 14:36:50
1

Mejor respuesta

2

ColorImage es un Qt privado interno componente:

https://github.com/qt/qtdeclarative/blob/dev/src/quickcontrols2impl/qquickcolorimage.cpp

No parece ser compatible con los no-uso interno.

Si realmente quieres usar, tratar import QtQuick.Controls.impl 2.15

Tenga en cuenta que ColorOverlay está disponible de nuevo en Qt 6.2 en Qt5Compat:

https://doc.qt.io/qt-6/qml-qt5compat-graphicaleffects-coloroverlay.html

Eventualmente será reemplazado por Qt Quick MultiEffect:

https://marketplace.qt.io/products/qt-quick-multieffect

2021-11-14 16:05:34

Gracias a esto ayudó a resolver mi problema!
Curtwagner1984

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................