Проблема со стилем поля со списком QML в QtQuick.Controls 2.2

Я новичок. Я пытаюсь использовать поле со списком для заполнения списка элементов, но когда я пытался создать стиль, возникла проблема с отображением текста. Вот код:

import QtQuick 2.7
import QtQuick.Controls 2.2

Item {
    property string btntext : "First"
    signal dropDownIndexChanged(int index)

    id: mainDropDown
    ListModel{
        id: modelList
        ListElement{ text: "First" }
        ListElement{ text: "Second" }
        ListElement{ text: "Third" }
    }

    ComboBox {
        id: comboButton
        width: parent.width
        height: parent.height
        model:modelList
        currentIndex: 0
        editText : btntext

        Image {
            id: imageMainButton
            x: 119
            anchors.top: parent.verticalCenter
            anchors.right: parent.right
            anchors.rightMargin: 9
            anchors.topMargin: -7
            fillMode: Image.Tile
            sourceSize.height: 25
            sourceSize.width: 25
            source: "<some image>"
        }
        delegate: ItemDelegate {
            id:itemDelegate
            width: comboButton.width

            background:Rectangle{
                gradient: Gradient {
                    GradientStop {
                        position: 0.0
                        color: itemDelegate.down ? "white" : "blue"
                    }
                    GradientStop {
                        position: 1.0
                        color: itemDelegate.down ? "yellow" : "orange"
                    }
                }
            }

            contentItem: Text {
                text: modelData
                elide: Text.ElideRight

                horizontalAlignment: Text.AlignLeft
                verticalAlignment: Text.AlignVCenter
                font.pointSize: 11
                font.family: "Arial"
                color:  itemDelegate.down ? "black" : "white"
            }
            highlighted: comboButton.highlightedIndex === index

        }

        indicator: Canvas {
        }



        //When this is added combo box text disapears or will be empty until something else is selected from the dropdown.
        contentItem: Text {
            text: comboButton.displayText
            anchors.centerIn: parent

            //font: comboButton.font
            horizontalAlignment: Text.AlignLeft
            verticalAlignment: Text.AlignVCenter
            elide: Text.ElideRight

            renderType: Text.NativeRendering
            anchors.left : parent.left
            anchors.leftMargin: 10
            font.family: "Verdena"
            font.pointSize: 12
            font.bold: true
            color: "white"
        }


        background: Rectangle {
            implicitWidth: 120
            implicitHeight: 40
            radius: 2

            color : "white"
            //height:100
            smooth: true
            //border.width: 1
            border.color: "white"


        }

        popup: Popup {
            y: comboButton.height
            width: comboButton.width -5
            //implicitHeight: contentItem.implicitHeight -1
            padding: 1

            background: Rectangle {
                border.color: "black"
                radius: 2
                color : "white"
            }

            contentItem: ListView {
                //clip: true
                implicitHeight: contentHeight
                model: comboButton.popup.visible ? comboButton.delegateModel : null
                currentIndex: comboButton.highlightedIndex
                interactive: false

            }
        }

        onCurrentIndexChanged:
        {
            btntext = mainDropDown.get(currentIndex).text
            dropDownIndexChanged(currentIndex)
            console.log(btntext ,currentIndex)
        }
    }
}

1) Как упоминалось выше, почему текст со списком не отображается, пока я не выберу элемент из раскрывающегося списка?

2) Выбранный индекс/элемент вообще не выделяется.


person pra7    schedule 21.07.2017    source источник


Ответы (1)


1) Как упоминалось выше, почему текст со списком не отображается, пока я не выберу элемент из раскрывающегося списка?

Это связано с тем, что цвет вашего фонового прямоугольника «белый», такой же, как цвет вашего текста («белый» — цвет по умолчанию).

2) Выбранный индекс/элемент вообще не выделяется.

Это связано с тем, что внутри делегата (идентификатор: itemDelegate) вы меняете цвет на основе условия itemDelegate.down. Измените это на itemDelegate.highlighted.

person Praveen Kumar    schedule 21.07.2017
comment
Еще один вопрос: я установил для свойства popup:contentitem:ListView interactive значение false , из-за чего границы во всплывающем окне не видны должным образом. Можете ли вы предложить, как это решить? - person pra7; 21.07.2017
comment
Можете ли вы прикрепить скриншот проблемы, которую вы описали выше? - person Praveen Kumar; 22.07.2017
comment
itemDelegate width должен быть таким же, как у Listview width, который определяется как contentItem из popup, а не как comboButton.width - person Praveen Kumar; 24.07.2017