Qt, QML, ColorImage není typ

0

Otázka

Udělal jsem QML tlačítko součásti a jsem použít součást s názvem ColorImage pro ikonu. Poté, co hledal způsob, jak změnit barvy obrazu. Zjistil jsem, že Qt již podporu ColorOverlay

Vznášet se, jen jsem napsal v "color" v Qt Design Studio a ColorImage vyskočila. Snažil jsem se najít dokumentaci, on-line, ale nemohl jsem nic najít. Nicméně, když jsem se rozhodl to zkusit, to prostě funguje jak jsem očekával:

To je relevantní kód z mých tlačítko:

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

Když hovered státu, z tlačítka se stane true to umožňuje následující stav:

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

            PropertyChanges {
                target: buttonBackground
                color: iconColor
            }
        },

což swapy ikonu a barvu pozadí na tlačítko.

To funguje v náhledu Qt Designer. Nicméně, když se snažím spustit z Pyside, řekne mi: ColorImage is not a type a prostě selže načíst tlačítko.

Snažil jsem se najít dokumentaci o ColorImage zjistit, možná je tam import chybí. Nicméně, nemohl jsem nic. Qt Designer je vnitřní pomoc není zase až nic tak dobře. To je jako, pokud tato složka neexistuje. Ale funguje to, a funguje to v Design Studio.

Zde je kompletní kód pro tlačítko:

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
}

To je, jak to vypadá v designer: Here is how it looks in the designer

Může mi někdo pomoci zjistit, proč to stěžuje ColorImagenejsem typ, když se snažím spustit?

Edit:

Dovoz v souboru výše:

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

Nejlepší odpověď

2

ColorImage je Qt vnitřní soukromé části:

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

To se nezdá být podporovány pro non-interní použití.

Pokud opravdu chcete použít, zkuste import QtQuick.Controls.impl 2.15

Všimněte si, že ColorOverlay je opět k dispozici v Qt 6.2 v Qt5Compat:

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

To bude nakonec být nahrazen Qt Quick MultiEffect:

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

2021-11-14 16:05:34

Děkujeme vám to pomohlo vyřešit můj problém!
Curtwagner1984

V jiných jazycích

Tato stránka je v jiných jazycích

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