如何打开 ComboBox 下拉菜单?

How to open ComboBox dropdown menu?

我正在制作一个自定义 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 之类的东西,但它似乎不起作用。任何帮助将非常感激, 谢谢。

根据消息来源,Combobox 有一个内部 属性 __popup。由于是内部的,所以不保证在不同版本的Qt之间是一致的。但是,由于控件 1 可以被视为 "done",因此 属性 不太可能在未来的版本中发生变化。

使用__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
        }
    }
}

最后,可以对 ComboBoxComboBox 采用类似的方法,其中 popup is not internal 可以通过简单地更改其 visible 属性 来显示,即:

combo.popup.visible = true