18QQuickPlatformMessageDialog::QQuickPlatformMessageDialog(QObject *parent)
20 qCDebug(lcQuickPlatformMessageDialog)
21 <<
"creating non-native Qt Quick MessageDialog with parent" << parent;
27 auto qmlContext = ::qmlContext(parent);
29 qmlWarning(parent) <<
"No QQmlContext for QQuickPlatformMessageDialog; can't create "
30 "non-native MessageDialog implementation";
34 const auto dialogQmlUrl = QUrl(QStringLiteral(
35 "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/qml/MessageDialog.qml"));
37 QQmlComponent messageDialogComponent(qmlContext->engine(), dialogQmlUrl, parent);
38 if (!messageDialogComponent.isReady()) {
39 qmlWarning(parent) <<
"Failed to load non-native MessageBox implementation:\n"
40 << messageDialogComponent.errorString();
44 m_dialog = qobject_cast<QQuickMessageDialogImpl *>(messageDialogComponent.create());
47 qmlWarning(parent) <<
"Failed to create an instance of the non-native MessageBox:\n"
48 << messageDialogComponent.errorString();
52 m_dialog->setParent(
this);
54 connect(m_dialog, &QQuickDialog::accepted,
this, &QPlatformDialogHelper::accept);
55 connect(m_dialog, &QQuickDialog::rejected,
this, &QPlatformDialogHelper::reject);
56 connect(m_dialog, &QQuickMessageDialogImpl::buttonClicked,
this,
57 &QQuickPlatformMessageDialog::clicked);
66bool QQuickPlatformMessageDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality,
69 qCDebug(lcQuickPlatformMessageDialog)
70 <<
"show called with flags" << flags <<
"modality" << modality <<
"parent" << parent;
77 auto quickWindow = qobject_cast<QQuickWindow *>(parent);
79 qmlInfo(
this->parent()) <<
"Parent window (" << parent
80 <<
") of non-native dialog is not a QQuickWindow";
83 m_dialog->setParent(parent);
84 m_dialog->resetParentItem();
86 auto popupPrivate = QQuickPopupPrivate::get(m_dialog);
87 popupPrivate->getAnchors()->setCenterIn(m_dialog->parentItem());
89 QSharedPointer<QMessageDialogOptions> options = QPlatformMessageDialogHelper::options();
90 m_dialog->setTitle(options->windowTitle());
91 m_dialog->setOptions(options);
92 m_dialog->setWindowModality(modality);