获取Qml应用程序窗口的父窗口小部件

时间:2018-11-28 08:00:05

标签: qt qml qtquick2 qtquickcontrols2

我想将本机QMessageBox对话框(或任何其他基于QDialog的自定义类)的父级设置为ApplicationWindow类型的Qml窗口。

使用普通的Qt小部件,代码如下:

class MyClass: public QWidget {
void alertMe() {
    QMessageBox::warning(this, ...);
}
};

现在我想要这样的东西:

class MyClass: public QObject {
Q_INVOKABLE void alertMe() {
    QMessageBox::warning(PARENT, ...);
}
};

//Qml:
ApplicationWindow {
    MyClass {
        id: item
    }
    Button {
        onClicked: item.alertMe()
    }
}

一个选项是为PARENT传递一个nullptr,但这将警报对话框居中显示在屏幕上,并且在某些系统上也会出现问题,因为该对话框隐藏在其他窗口的后面。如何从Qml QWidget中获取PARENT ApplicationWindow对象?

[更新] :情况如下:Qml主代码在QQuickWidget中运行。在这里,我可以将QQuickWidget用作对话框的父级。但是问题是Qml代码可以生成新窗口(类型为ApplicationWindow),并且本机对话框应作为这些新窗口的父级。最简单的方法可能是为每个窗口创建单独的QQuickWidget。由于可用性问题,我不想使用Qml对话框。 [更新结束]

致谢

0 个答案:

没有答案