我正在制作一个自定义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
这样的内容,但它似乎不起作用。任何帮助将非常感激,
感谢。
答案 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