Qt, QML, ColorImage-это не тип

0

Вопрос

Я создал компонент кнопки 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
}

Вот как это выглядит в конструкторе: Here is how it looks in the designer

Может кто-нибудь помочь мне понять, почему он жалуется на ColorImageне в моем вкусе, когда я пытаюсь запустить?

Редактировать:

Импорт в файле выше:

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

Лучший ответ

2

ColorImage-это внутренний закрытый компонент Qt:

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

Похоже, он не поддерживается для использования не внутри компании.

Если вы действительно хотите его использовать, попробуйте import QtQuick.Controls.impl 2.15

Обратите внимание, что ColorOverlay снова доступен в Qt 6.2 в Qt5Compat:

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

В конечном итоге он будет заменен Qt Quick MultiEffect:

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

2021-11-14 16:05:34

Спасибо, это помогло решить мою проблему!
Curtwagner1984

На других языках

Эта страница на других языках

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