如何打开ComboBox下拉菜单?

时间:2016-07-06 16:55:11

标签: qt drop-down-menu combobox qml qtquickcontrols

我正在制作一个自定义ComboBox项目,两边都有两个图标,中间有一个ComboBox。我希望当点击任何图标时,ComboBox下拉菜单会打开,但我不知道该怎么做。

这是我的代码:

// ComboIcon.qml

Rectangle{
    color: "#fff"
    radius: 10
    property alias iconSource: icon.source
    property alias comboModel: combo.model

    Row{
        anchors.fill: parent
        Item{
            width: parent.width * 0.2
            height: parent.height
            Image{
                id: icon
                width: parent.width * 0.7
                height: parent.height * 0.7
                anchors.centerIn: parent
            }
            MouseArea{
                anchors.fill: parent
                // onClicked: combo.??
            }
        }
        ComboBox{
            id: combo
            width: parent.width * 0.65
            height: parent.height
            style: ComboBoxStyle{
                background:Rectangle {
                    color: "#fff"
                    anchors.fill: parent
                }
                label: Text {
                    height: parent.height * 0.7
                    anchors.verticalCenter: parent.verticalCenter
                    verticalAlignment: Text.AlignVCenter
                    horizontalAlignment: Text.AlignHLeft
                    color: "#6186da"
                    font.family: "SansSerif"
                    font.pointSize : 20
                    fontSizeMode: Text.Fit
                    text: control.currentText
                }
            }
        }
        Item{
            width: parent.width * 0.15
            height: parent.height
            Image{
                width: parent.width * 0.4
                height: parent.height * 0.4
                anchors.centerIn: parent
                fillMode: Image.PreserveAspectFit
                source:  "../assets/images/combo_arrow.png"
            }
            MouseArea{
                anchors.fill: parent
                //onClicked: combo.??
            }
        }
    }
}

我在考虑使用combo.clicked()combo.focus = true这样的内容,但它似乎不起作用。任何帮助将非常感激, 感谢。

1 个答案:

答案 0 :(得分:2)

根据消息来源,Combobox有一个内部属性__popup。由于它是内部的,因此不能保证在不同版本的Qt之间保持一致。但是,由于控件1可以被认为是“完成”#34;这种财产在未来的版本中不太可能发生变化。

使用__popup你可以这样写:

import QtQuick 2.2
import QtQuick.Window 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.4

ApplicationWindow {
    visible: true
    width: 300
    height: 200

    RowLayout {
        anchors.fill: parent

        Image {
            fillMode: Image.PreserveAspectFit
            Layout.preferredHeight: 64
            source: "https://cdn1.iconfinder.com/data/icons/prettyoffice9/128/open-file.png"

            MouseArea {
                anchors.fill: parent
                onClicked: combo.__popup.toggleShow()  // <-- showing the popup here!
            }
        }

        ComboBox {
            id: combo
            model: 3
        }
    }
}

最后,对于来自popup is not internal的控件2的ComboBox,可以采用类似的方法,只需更改其visible属性即可显示,即:

combo.popup.visible = true