如何打开 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
}
}
}
最后,可以对 ComboBox
的 ComboBox
采用类似的方法,其中 popup
is not internal 可以通过简单地更改其 visible
属性 来显示,即:
combo.popup.visible = true
我正在制作一个自定义 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
}
}
}
最后,可以对 ComboBox
的 ComboBox
采用类似的方法,其中 popup
is not internal 可以通过简单地更改其 visible
属性 来显示,即:
combo.popup.visible = true