So blenden Sie eine QML-Fenster, wenn es den Fokus verliert
Ich versuche, erstellen Sie ein Kombinationsfeld mit Mehrfachauswahl mit QML. Seine dropdown wird ein QML-Fenster mit der Flagge Qt.Popup, es wird also nicht über eine Titelleiste. Das dropdown sollte verschwinden, wenn der Benutzer klickt außerhalb.
Habe ich versucht den folgenden code:
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;
}
}
}
}
}
Aber es funktioniert nicht.
Im obigen code, wenn der Benutzer klickt auf das Haupt-Fenster, ein popup angezeigt und wenn der Benutzer klickt auf ein anderes Fenster oder auf die Titelleiste des Hauptfensters sollte es verschwinden, aber es nicht tun.
Wenn ich die import version 2.1 von QtQuick.Fenster statt 2.0 ich kann ein 'onActiveChanged' handler (ohne einen Fehler) in der dropdown-Fenster, aber es wird nie aufgerufen.
Vielleicht wäre ich in der Lage sein, dies zu tun mit einigen C++, aber ich versuche das zu vermeiden.
Ich benutze Qt 5.1.1 auf Ubuntu 13.10.
Danke.
Update: wechselte ich auf Qt 5.2 und das problem gelöst (siehe meine Antwort unten).
- Bitte geben Sie weitere details. Was wollen Sie erreichen? Welchen Fehler hast du bekommen?
- Ich aktualisiert meine Frage.
- Tut
dropdown
verschwinden, nachdem Sie folgende Schritte aus: klicken Sie auf dem Hauptfenster, dann aufdropdown
, dann auf die wichtigsten Fenster-Titel? - Ja, es verschwindet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Heute habe ich ein Upgrade auf Qt 5.2. In Qt 5.2 der folgende code funktioniert wie ich will:
Funktioniert es, weil in Qt 5.2,
QtQuick.Window 2.1
angegeben ist in der Dokumentation wie die neueste version des Moduls, und es gibt mir Zugang zuQWindow
'sactiveChanged
signal undrequestActivate
- Steckplatz (QMLWindow
ist das äquivalent vonQQuickWindow
in C++, welche eine Unterklasse vonQWindow
).Wahrscheinlich, wenn Sie Veränderung (in
onClicked
handler)zu:
erhalten Sie notwendige Folge.
Es ist ein schönes Beispiel
DropDown
: Qt QML dropdown-Liste wie im HTML, ohne mit einem anderenWindow
.dropdown
ausgeblendet, wenn es den Fokus verliert und seineflags
Eigenschaft ändert seinen Wert auf Qt.Popup nachdropdown
gezeigt wird, aber es behält seine Titelleiste, schließen-Schaltfläche, etc. Für mich sieht es wie ein bug. Auch, danke für den link. Ich denke es wird mir helfen. Ich will noch ein Fenster, auch wenn ich auf der Arbeit in C++ für diese, weil ich denke, dass nur auf diese Weise die dropdown erweitern zu können über die Größe des Hauptfensters.Verlorenen Stunden beim binden an ActiveChanged. Eine andere Lösung gefunden