Qt 当QML窗口失去焦点时如何隐藏它
我正在尝试使用QML创建具有多个选择的组合框。它的下拉列表将是一个带有标志Qt.Popup的QML窗口,因此它将没有标题栏。当用户在下拉列表外单击时,下拉列表应消失 我尝试了以下代码:Qt 当QML窗口失去焦点时如何隐藏它,qt,qml,Qt,Qml,我正在尝试使用QML创建具有多个选择的组合框。它的下拉列表将是一个带有标志Qt.Popup的QML窗口,因此它将没有标题栏。当用户在下拉列表外单击时,下拉列表应消失 我尝试了以下代码: import QtQuick 2.0 import QtQuick.Window 2.0 Window { id: mainWindow width: 200 height: 200 MouseArea { anchors.fill: parent onC
import QtQuick 2.0
import QtQuick.Window 2.0
Window { id: mainWindow
width: 200
height: 200
MouseArea {
anchors.fill: parent
onClicked: {
dropdown.x = mainWindow.x + 50;
dropdown.y = mainWindow.y + 50;
dropdown.visible = true;
}
}
Window { id: dropdown
height: 200
width: 200
flags: Qt.Popup
color: 'green'
visible: false
onVisibleChanged: {
if (visible) {
focusScope.focus = true;
focusScope.forceActiveFocus();
}
}
FocusScope { id: focusScope
focus: true
anchors {
fill: parent
}
onActiveFocusChanged: {
if (!activeFocus) {
dropdown.visible = false;
}
}
}
}
}
但它不起作用
在上面的代码中,当用户单击主窗口时,会出现一个弹出窗口,如果用户单击另一个窗口或主窗口的标题栏,它应该会消失,但不会这样做
如果我导入QtQuick.Window的2.1版而不是2.0版,我可以在下拉窗口中放置一个“onActiveChanged”处理程序(不会出错),但它永远不会被调用
也许我可以用C++来做这件事,但我尽量避免这样做。
我在Ubuntu 13.10上使用Qt5.1.1
多谢各位
更新:我切换到Qt5.2并解决了问题(请参见下面的答案)。如果您更改(在中单击处理程序)
致:
你会得到必要的结果
有一个很好的下拉列表的例子
:不使用另一个窗口
,今天我升级到了Qt 5.2。在Qt 5.2中,以下代码按我的要求工作:
import QtQuick 2.2
import QtQuick.Window 2.1
Window { id: mainWindow
width: 200
height: 200
MouseArea {
anchors.fill: parent
onClicked: {
dropdown.x = mainWindow.x + 50;
dropdown.y = mainWindow.y + 50;
dropdown.visible = true;
dropdown.requestActivate();
}
}
Window { id: dropdown
height: 200
width: 200
flags: Qt.Popup
color: 'green'
visible: false
onActiveChanged: {
if (!active) {
dropdown.visible = false;
}
}
}
}
它之所以有效,是因为在Qt 5.2中,<代码> QtQuq.Windows 2.1 < /C> >被指定为该模块的最新版本,它使我能够访问S和(是C++中的等价类,它是子类)。
试图绑定到ActVchange的丢失时间。找到了另一个解决方案
onActiveFocusItemChanged: {
if (!activeFocusItem) {
_.visible = false
}
}
请提供更多细节。你想达到什么目标?您出现了什么错误?@johny我更新了我的问题。下拉列表是否在以下步骤后消失:单击主窗口,然后单击下拉列表,然后单击主窗口标题?@johny是的,它消失了。谢谢您的回答。如果我做了建议的更改,应用程序的行为会很奇怪<代码>下拉列表
在失去焦点时隐藏,其标志
属性将其值更改为Qt。显示下拉列表
后弹出,但它保留其标题栏、关闭按钮等。对我来说,这看起来像一个bug。另外,谢谢你的链接。我想这对我有帮助。我仍然想使用窗口,即使我必须在C++中工作,因为我认为只有这样,下拉可以扩展到主窗口的大小之外。
import QtQuick 2.2
import QtQuick.Window 2.1
Window { id: mainWindow
width: 200
height: 200
MouseArea {
anchors.fill: parent
onClicked: {
dropdown.x = mainWindow.x + 50;
dropdown.y = mainWindow.y + 50;
dropdown.visible = true;
dropdown.requestActivate();
}
}
Window { id: dropdown
height: 200
width: 200
flags: Qt.Popup
color: 'green'
visible: false
onActiveChanged: {
if (!active) {
dropdown.visible = false;
}
}
}
}
onActiveFocusItemChanged: {
if (!activeFocusItem) {
_.visible = false
}
}