【发布时间】:2017-05-18 12:07:50
【问题描述】:
当我尝试执行此代码时,我有一个奇怪的行为让我很恼火:
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
id: window
visible: true
width: 640
height: 480
Rectangle {
color: "green"
width: parent.width/2
height: parent.height
anchors.right : parent.right
ComboBox {
id:combo
popup.visible: combo.activeFocus
model: [ "Banana", "Apple", "Coconut" ]
}
}
CheckBox {
id:check
}
}
如果我点击CheckBox,然后点击ComboBox,ComboBox.popup将在 1 毫秒内出现然后消失。
我不明白为什么因为activeFocus = true
你知道为什么吗?
【问题讨论】:
-
你选择了一些东西,所以 popup.close() 将被调用,设置 popup.visible = false。你期待什么?
-
什么意思?我选择了
ComboBox:我点击了CheckBox。然后我点击ComboBox。所以我选择了ComboBox,所以现在的重点是ComboBox。但是,如果双击ComboBox而不是单击,它会正常工作。 -
这种用例根本没有想到。我可以想象那里发生的是 ComboBox 接收鼠标事件并将其传递给处理焦点的基类实现。控件获得主动焦点和繁荣,弹出窗口打开。然后执行返回到 ComboBox 的鼠标事件处理程序,该处理程序会像在正常情况下一样切换弹出窗口的可见性,因此弹出窗口立即关闭。它可以通过在进行焦点处理之前查询弹出窗口的可见性来轻松修复。随时报告错误。
-
@jpnurmi:这也是我得出的结论。但是我看不到哪里有要修复的错误。您唯一能做的就是首先处理鼠标事件——这将有助于(通过覆盖
popup.visible的绑定)来保持它的显示。但这里唯一有效改变的是popup.visible: combo.activeFocus将被解除绑定,您可以节省时间,只需删除该行。如果您只想让一个函数从外部显示它,请创建一个function show() { forceActiveFocus(); popup.open() }并调用它而不是forceActiveFocus()
标签: qt focus qml qtquick2 qtquickcontrols2