Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquickplatformmessagedialog.cpp
Go to the documentation of this file.
1
// Copyright (C) 2021 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4
#include "
qquickplatformmessagedialog_p.h
"
5
6
#include <QtQuickTemplates2/private/qquickpopup_p_p.h>
7
#include <QtQuickTemplates2/private/qquickpopupanchors_p.h>
8
9
#include "
qquickmessagedialogimpl_p.h
"
10
11
QT_BEGIN_NAMESPACE
12
13
Q_LOGGING_CATEGORY
(lcQuickPlatformMessageDialog,
"qt.quick.dialogs.quickplatformmessagedialog"
)
14
15
QQuickPlatformMessageDialog
::
QQuickPlatformMessageDialog
(
QObject
*parent)
16
{
17
qCDebug
(lcQuickPlatformMessageDialog)
18
<<
"creating non-native Qt Quick MessageDialog with parent"
<< parent;
19
20
// Set a parent so that we get deleted if we can't be shown for whatever reason.
21
// Our eventual parent should be the window, though.
22
setParent
(parent);
23
24
auto
qmlContext
=
::qmlContext
(parent);
25
if
(!
qmlContext
) {
26
qmlWarning
(parent) <<
"No QQmlContext for QQuickPlatformMessageDialog; can't create "
27
"non-native MessageDialog implementation"
;
28
return
;
29
}
30
31
const
auto
dialogQmlUrl =
QUrl
(
QStringLiteral
(
32
"qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/qml/MessageDialog.qml"
));
33
34
QQmlComponent
messageDialogComponent(
qmlContext
->
engine
(), dialogQmlUrl, parent);
35
if
(!messageDialogComponent.isReady()) {
36
qmlWarning
(parent) <<
"Failed to load non-native MessageBox implementation:\n"
37
<< messageDialogComponent.errorString();
38
return
;
39
}
40
41
m_dialog = qobject_cast<QQuickMessageDialogImpl *>(messageDialogComponent.create());
42
43
if
(!m_dialog) {
44
qmlWarning
(parent) <<
"Failed to create an instance of the non-native MessageBox:\n"
45
<< messageDialogComponent.errorString();
46
return
;
47
}
48
49
m_dialog->setParent(
this
);
50
51
connect
(m_dialog, &
QQuickDialog::accepted
,
this
, &
QPlatformDialogHelper::accept
);
52
connect
(m_dialog, &
QQuickDialog::rejected
,
this
, &
QPlatformDialogHelper::reject
);
53
connect
(m_dialog, &
QQuickMessageDialogImpl::buttonClicked
,
this
,
54
&
QQuickPlatformMessageDialog::clicked
);
55
}
56
57
void
QQuickPlatformMessageDialog::exec
()
58
{
59
qCWarning
(lcQuickPlatformMessageDialog)
60
<<
"exec() is not supported for the Qt Quick MessageDialog fallback"
;
61
}
62
63
bool
QQuickPlatformMessageDialog::show
(Qt::WindowFlags
flags
,
Qt::WindowModality
modality,
64
QWindow
*parent)
65
{
66
qCDebug
(lcQuickPlatformMessageDialog)
67
<<
"show called with flags"
<<
flags
<<
"modality"
<< modality <<
"parent"
<<
parent
;
68
if
(!m_dialog)
69
return
false
;
70
71
if
(!
parent
)
72
return
false
;
73
74
auto
quickWindow = qobject_cast<QQuickWindow *>(
parent
);
75
if
(!quickWindow) {
76
qmlInfo
(this->
parent
()) <<
"Parent window ("
<< parent
77
<<
") of non-native dialog is not a QQuickWindow"
;
78
return
false
;
79
}
80
m_dialog->
setParent
(
parent
);
81
m_dialog->resetParentItem();
82
83
auto
popupPrivate =
QQuickPopupPrivate::get
(m_dialog);
84
popupPrivate->getAnchors()->setCenterIn(m_dialog->parentItem());
85
86
QSharedPointer<QMessageDialogOptions>
options
=
QPlatformMessageDialogHelper::options
();
87
m_dialog->
setTitle
(
options
->
windowTitle
());
88
m_dialog->
setOptions
(
options
);
89
90
m_dialog->
open
();
91
return
true
;
92
}
93
void
QQuickPlatformMessageDialog::hide
()
94
{
95
if
(
isValid
())
96
m_dialog->
close
();
97
}
98
99
bool
QQuickPlatformMessageDialog::isValid
()
const
100
{
101
return
m_dialog;
102
}
103
104
QQuickMessageDialogImpl
*
QQuickPlatformMessageDialog::dialog
()
const
105
{
106
return
m_dialog;
107
}
108
109
QT_END_NAMESPACE
110
111
#include "moc_qquickplatformmessagedialog_p.cpp"
QMessageDialogOptions::windowTitle
QString windowTitle() const
Definition
qplatformdialoghelper.cpp:815
QObject
\inmodule QtCore
Definition
qobject.h:103
QObject::parent
QObject * parent() const
Returns a pointer to the parent object.
Definition
qobject.h:346
QObject::setParent
void setParent(QObject *parent)
Makes the object a child of parent.
Definition
qobject.cpp:2195
QPlatformDialogHelper::accept
void accept()
QPlatformDialogHelper::reject
void reject()
QPlatformMessageDialogHelper::options
const QSharedPointer< QMessageDialogOptions > & options() const
Definition
qplatformdialoghelper.cpp:1046
QPlatformMessageDialogHelper::clicked
void clicked(QPlatformDialogHelper::StandardButton button, QPlatformDialogHelper::ButtonRole role)
QQmlComponent
The QQmlComponent class encapsulates a QML component definition.
Definition
qqmlcomponent.h:32
QQmlContext::engine
QQmlEngine * engine() const
Return the context's QQmlEngine, or \nullptr if the context has no QQmlEngine or the QQmlEngine was d...
Definition
qqmlcontext.cpp:153
QQuickDialog::setTitle
void setTitle(const QString &title)
Definition
qquickdialog.cpp:224
QQuickDialog::accepted
void accepted()
QQuickDialog::rejected
void rejected()
QQuickMessageDialogImpl
Definition
qquickmessagedialogimpl_p.h:33
QQuickMessageDialogImpl::setOptions
void setOptions(const QSharedPointer< QMessageDialogOptions > &options)
Definition
qquickmessagedialogimpl.cpp:47
QQuickMessageDialogImpl::buttonClicked
void buttonClicked(QPlatformDialogHelper::StandardButton button, QPlatformDialogHelper::ButtonRole role)
QQuickPlatformMessageDialog
Definition
qquickplatformmessagedialog_p.h:27
QQuickPlatformMessageDialog::exec
void exec() override
Definition
qquickplatformmessagedialog.cpp:57
QQuickPlatformMessageDialog::isValid
bool isValid() const
Definition
qquickplatformmessagedialog.cpp:99
QQuickPlatformMessageDialog::hide
void hide() override
Definition
qquickplatformmessagedialog.cpp:93
QQuickPlatformMessageDialog::dialog
QQuickMessageDialogImpl * dialog() const
Definition
qquickplatformmessagedialog.cpp:104
QQuickPlatformMessageDialog::show
bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override
Definition
qquickplatformmessagedialog.cpp:63
QQuickPopupPrivate::get
static QQuickPopupPrivate * get(QQuickPopup *popup)
Definition
qquickpopup_p_p.h:65
QQuickPopup::close
void close()
\qmlmethod void QtQuick.Controls::Popup::close()
Definition
qquickpopup.cpp:1102
QQuickPopup::open
void open()
\qmlmethod void QtQuick.Controls::Popup::open()
Definition
qquickpopup.cpp:1090
QUrl
\inmodule QtCore
Definition
qurl.h:94
QWindow
\inmodule QtGui
Definition
qwindow.h:63
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qstandardpaths_haiku.cpp:21
QT_END_NAMESPACE
Definition
qsharedpointer.cpp:1590
Qt::WindowModality
WindowModality
Definition
qnamespace.h:1547
Q_LOGGING_CATEGORY
#define Q_LOGGING_CATEGORY(name,...)
Definition
qloggingcategory.h:112
qCWarning
#define qCWarning(category,...)
Definition
qloggingcategory.h:125
qCDebug
#define qCDebug(category,...)
Definition
qloggingcategory.h:123
flags
GLbitfield flags
Definition
qopengles2ext.h:1026
qmlContext
QQmlContext * qmlContext(const QObject *obj)
Definition
qqml.cpp:75
qmlInfo
Q_QML_EXPORT QQmlInfo qmlInfo(const QObject *me)
qmlWarning
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
qquickmessagedialogimpl_p.h
qquickplatformmessagedialog_p.h
QStringLiteral
#define QStringLiteral(str)
Definition
qstringliteral.h:36
connect
connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection)
setParent
file setParent(multiPart)
qtdeclarative
src
quickdialogs
quickdialogsquickimpl
qquickplatformmessagedialog.cpp
Generated by
1.10.0