我在MyWindow.qml中声明了一个QML窗口:
Item {
id: thisWindow
width: 500
height: 140
... sub-items that declare the UI of the window ...
还有一个实例化该QML的C ++类:
class MyWindow : public QQuickView
...
MyWindow::MyWindow() {
setSource(QUrl("qrc:/MyWindow.qml"));
setFlags(Qt::WindowFlags(Qt::Popup));
}
如何从Javascript / QML代码关闭该窗口? 我不能调用thisWindow.close(),因为它只是层次结构中的一项。
答案 0 :(得分:2)
最简单的选择是使用QQuickView
将setContextProperty()
导出到.qml:
#include <QQmlEngine>
#include <QQmlContext>
// ...
{
engine()->rootContext()->setContextProperty("view", this);
setSource(QUrl("qrc:/MyWindow.qml"));
setFlags(Qt::WindowFlags(Qt::Popup));
}
然后在QML中可以使用:
view.close()
答案 1 :(得分:2)
您不需要c ++就能做到。您可以直接使用QML的window
attached property。
//other imports
import QtQuick.Window 2.2
Item {
id: thisWindow
width: 500
height: 140
//... sub-items that declare the UI of the window ...
MouseArea {
anchors.fill: parent
onClicked: Window.window.close()
}
}
答案 2 :(得分:1)
使用Qt全局对象并按照此处的说明进行操作: http://doc.qt.io/qt-5/qml-qtqml-qt.html#quit-method