我在组合框中选择了一个项目。例如,项目的位置是300。如果我想从组合框中选择新元素。弹出窗口从头开始。我想从当前项目位置弹出窗口。
ComboBox {
id: control
model: ["First", "Second", "Third","MERHABA","NASILSIN","SELAM","IYIMISIN","DOSTUM","SUAN","BIR","DENEME YAPILIYOR"]
//width: 350
//font.pixelSize: 20
delegate: ItemDelegate {
width: 350
text: modelData
font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
font.pixelSize: 30
highlighted: control.highlightedIndex == index
}
答案 0 :(得分:1)
对于 QtQuick.Controls 2,有一个 'popup' 属性,所以我们可以使用它自己的属性 'y' 设置弹出位置,如下所示:
ComboBox {
model: ["First", "Second", "Third"]
delegate: ItemDelegate {
text: modelData
}
popup.y: y + height // popup just below ComboBox
}
答案 1 :(得分:0)
如果条件允许,ComboBox
将以您希望的方式工作,也就是说,如果您有足够的元素填充整个下拉列表,那么它将显示在该项目中的当前索引项目之后比起初。
然而,股票ComboBox
似乎不允许您指定下拉列表高度,因此它将比您的示例中的元素多得多。或者更高的元素。
此外,如果当前索引是最后一个元素,您会如何想象这将显示?该列表只显示最后一个元素加上一大堆什么都没有,甚至不可能,最后一个项目无法从列表末尾向上移动。
如果您真的想要这种行为,则必须从头开始实现自己的组合框元素。
答案 2 :(得分:0)
我遇到了同样的问题,发现如果将弹出窗口设置为onOpened,则可以完美运行:
ComboBox {
id: yearDropdown
model: yearModel
onActivated: updateVisibleDate()
popup: Popup {
id: comboPopup
clip: true
contentItem: ListView {
id: listView
implicitHeight: contentHeight
model: yearDropdown.popup.visible ? yearDropdown.delegateModel : null
onModelChanged: if(model) positionViewAtIndex(yearDropdown.currentIndex, ListView.Center);
ScrollIndicator.vertical: ScrollIndicator { }
}
onOpened: {
x = yearDropdown.x //Set the position you want
y = yearDropdown.y + yearDropdown.implicitHeight //Set the position you want
}
}
}