我想将本机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对话框。
[更新结束]
致谢