如何在QML / Javascript代码(涉及C ++代码)中关闭窗口?

时间:2018-12-17 17:57:11

标签: c++ qt qml

我在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(),因为它只是层次结构中的一项。

3 个答案:

答案 0 :(得分:2)

最简单的选择是使用QQuickViewsetContextProperty()导出到.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