Получить родительский виджет для окна приложения Qml - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу установить родительский элемент собственного диалога QMessageBox (или любого другого пользовательского класса на основе QDialog) в окно Qml типа ApplicationWindow.

С простыми виджетами 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()
    }
}

Один из вариантов - передать nullptr для PARENT, но это центрирует диалоговое окно с предупреждением на экране, а также создает проблемы.в некоторых системах, потому что диалог скрыт за другими окнами.Как я могу получить объект PARENT QWidget из Qml ApplicationWindow?

[Update] : Сценарий выглядит следующим образом: основной код Qml выполняется в QQuickWidget.Здесь я могу использовать QQuickWidget в качестве родительского для диалогов.Но проблема в том, что код Qml может генерировать новые окна (типа ApplicationWindow), и родные диалоги должны быть связаны с этими новыми окнами.Возможно, самый простой способ - создать отдельные QQuickWidgets для каждого окна.Я не хочу использовать диалоги Qml из-за проблем с юзабилити. [конец обновления]

С уважением

...