【发布时间】:2017-07-13 04:51:42
【问题描述】:
我正在构建一个带有复选框的自定义 QML ComboBox。它显示一切都很好,但我无法控制弹出关闭事件。
我希望组合框弹出窗口保持打开状态,以便我可以检查多个项目。并且仅当我在父母外部单击或单击逃生时才关闭。 目前,只要我检查一个项目,它就会关闭。
我正在使用 CheckDelegate,因此我可以覆盖组合框弹出窗口的外观。但是它不等待让我一次检查多个项目。
这是我的自定义组合框示例代码
import QtQuick 2.7
import QtQuick.Controls 2.1
ComboBox {
id: control
property alias combo_box_model: control.model
property string combo_box_displayText: control.displayText
property var combo_box_height
model: combo_box_model
delegate: CheckDelegate {
id: checkbox_control
width: control.width
contentItem: Text {
leftPadding: checkbox_control.indicator.width + control.leftPadding
text: modelData
font: control.font
elide: Text.ElideRight
verticalAlignment: Text.AlignVCenter
}
highlighted: control.highlightedIndex === index
// checked: combo_box_model.isChecked(index)
indicator: Rectangle {
implicitWidth: 26
implicitHeight: 26
x: control.leftPadding
anchors.verticalCenter: parent.verticalCenter
radius: 3
color: "transparent"
border.color: checkbox_control.down ? "#17a81a" : "#21be2b"
Rectangle {
width: 14
height: 14
x: 6
y: 6
radius: 2
color: checkbox_control.down ? "#17a81a" : "#21be2b"
visible: checkbox_control.checked
}
}
// onClicked: {
// combo_box_model.setChecked(index, checked)
// }
}
contentItem: Text {
leftPadding: 0
rightPadding: control.indicator.width + control.spacing
text: control.displayText
font: control.font
horizontalAlignment: Text.AlignLeft
verticalAlignment: Text.AlignVCenter
elide: Text.ElideRight
}
popup: Popup {
id: checkbox_popup
y: control.height - 1
width: control.width
implicitHeight: contentItem.implicitHeight
padding: 1
contentItem: ListView {
clip: true
implicitHeight: combo_box_height ? combo_box_height : contentHeight
model: control.popup.visible ? control.delegateModel : null
currentIndex: control.highlightedIndex
ScrollIndicator.vertical: ScrollIndicator { }
}
}
}
对于组合框弹出窗口 (checkbox_popup),我尝试将 closePolicy 设置为 NoAutoClose,但没有成功。
所以我觉得在 CheckDelegate 的某个地方我需要捕获关闭事件左右并处理它。但不确定究竟是如何或我错过了什么? 就 QML 而言,这是一个新手。
【问题讨论】: