KDDockWidgets API Documentation 2.0
Loading...
Searching...
No Matches
qtquick/views/View.h
Go to the documentation of this file.
1/*
2 This file is part of KDDockWidgets.
3
4 SPDX-FileCopyrightText: 2020 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
5 Author: SĂ©rgio Martins <sergio.martins@kdab.com>
6
7 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
8
9 Contact KDAB at <info@kdab.com> for commercial licensing options.
10*/
11
12#ifndef KD_VIEW_QTQUICK_H
13#define KD_VIEW_QTQUICK_H
14
15#pragma once
16
17#include "kddockwidgets/core/Controller.h"
18#include "kddockwidgets/qtcommon/View.h"
19
20#include <QDebug>
21#include <QEvent>
22#include <QResizeEvent>
23#include <QQuickItem>
24#include <QQuickWindow>
25#include <QQuickView>
26#include <QScreen>
27
28#include <memory>
29
30namespace KDDockWidgets::QtQuick {
31
32class MouseEventRedirector;
33
34inline QQuickItem *asQQuickItem(Core::View *view)
35{
36 if (!view)
37 return nullptr;
38
39 return qobject_cast<QQuickItem *>(QtCommon::View_qt::asQObject(view));
40}
41
42inline QQuickItem *asQQuickItem(Core::Controller *controller)
43{
44 if (!controller)
45 return nullptr;
46
47 return asQQuickItem(controller->view());
48}
49
50DOCKS_EXPORT QQmlContext *qmlContextFor(QQuickItem *);
51
52class DOCKS_EXPORT View : public QQuickItem, public QtCommon::View_qt
53{
54 Q_OBJECT
55public:
56 using Core::View::close;
57 using Core::View::height;
58 using Core::View::rect;
59 using Core::View::resize;
60 using Core::View::width;
61
62 explicit View(Core::Controller *controller, Core::ViewType type,
63 QQuickItem *parent = nullptr, Qt::WindowFlags windowFlags = {});
64
65 ~View() override = default;
66
67 QSize minSize() const override;
68 QSize maxSizeHint() const override;
69 QRect geometry() const override;
70 QRect normalGeometry() const override;
71 void setNormalGeometry(QRect geo);
72 void setGeometry(QRect) override;
73 void setMaximumSize(QSize sz) override;
74
75 bool isVisible() const override;
76 bool isExplicitlyHidden() const override;
77 void setVisible(bool is) override;
78
79 void move(int x, int y) override;
80 void setSize(int w, int h) override final;
81
82 void setWidth(int w) override;
83 void setHeight(int h) override;
84 void setFixedWidth(int w) override;
85 void setFixedHeight(int h) override;
86 void show() override;
87 void hide() override;
88 void updateGeometry();
89 void update() override;
90 void setParent(Core::View *parent) override;
91 void setParent(QQuickItem *parent);
92 static void raiseAndActivate(QQuickItem *);
93 void raiseAndActivate() override;
94 void activateWindow() override;
95 void raise() override;
96 static bool isRootView(const QQuickItem *);
97 bool isRootView() const override final;
98 QQuickView *quickView() const;
99 QPoint mapToGlobal(QPoint localPt) const override;
100 QPoint mapFromGlobal(QPoint globalPt) const override;
101 QPoint mapTo(Core::View *parent, QPoint pos) const override;
102 void setWindowOpacity(double v) override;
103
104 static bool close(QQuickItem *);
105 bool close() override;
106 void setFlag(Qt::WindowType f, bool on = true) override;
107 void enableAttribute(Qt::WidgetAttribute attr, bool enable = true) override;
108 bool hasAttribute(Qt::WidgetAttribute attr) const override;
109 Qt::WindowFlags flags() const override;
110
111 void setWindowTitle(const QString &title) override;
112 void setWindowIcon(const QIcon &icon) override;
113 bool isActiveWindow() const override;
114
115 Q_INVOKABLE void redirectMouseEvents(QQuickItem *from);
116 Q_INVOKABLE void showNormal() override;
117 Q_INVOKABLE void showMinimized() override;
118 Q_INVOKABLE void showMaximized() override;
119
120 bool isMinimized() const override;
121 bool isMaximized() const override;
122
123 std::shared_ptr<Core::Window> window() const override;
124 std::shared_ptr<Core::View> childViewAt(QPoint p) const override;
125 std::shared_ptr<Core::View> rootView() const override;
126 std::shared_ptr<Core::View> parentView() const override;
127
128 std::shared_ptr<Core::View> asWrapper() override;
129
130 void grabMouse() override;
131 void releaseMouse() override;
132 void releaseKeyboard() override;
133 void setFocus(Qt::FocusReason reason) override;
134 Qt::FocusPolicy focusPolicy() const override;
135 bool hasFocus() const override;
136 void setFocusPolicy(Qt::FocusPolicy) override;
137 QString viewName() const override;
138 void setMinimumSize(QSize sz) override;
139 void render(QPainter *) override;
140 void setCursor(Qt::CursorShape shape) override;
141 void setMouseTracking(bool enable) override;
142 QVector<std::shared_ptr<Core::View>> childViews() const override;
143 void setZOrder(int) override;
144 virtual QQuickItem *visualItem() const;
145
146 void onWindowStateChangeEvent(QWindowStateChangeEvent *);
147
149 static void makeItemFillParent(QQuickItem *item);
150
152 static QQuickItem *createItem(QQmlEngine *engine, const QString &filename, QQmlContext *context = nullptr);
153
156 static QQuickItem *createItem(const QString &filename, QQuickItem *parent, QQmlContext *ctx = nullptr);
157
158 static std::shared_ptr<Core::View> parentViewFor(const QQuickItem *);
159 static std::shared_ptr<Core::View> asQQuickWrapper(QQuickItem *item);
160
161Q_SIGNALS:
162 void geometryUpdated(); // similar to QLayout stuff, when size constraints change
163 void itemGeometryChanged(); // emitted when the geometry changes. QQuickItem::geometryChanged()
164 // isn't a signal, so prefixed item
165
166protected:
167 void QQUICKITEMgeometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override;
168 void itemChange(QQuickItem::ItemChange, const QQuickItem::ItemChangeData &) override;
169 bool eventFilter(QObject *watched, QEvent *ev) override;
170 bool event(QEvent *) override;
171
173 virtual void onHoverEvent(QHoverEvent *, QPoint /*globalPos*/)
174 {
175 }
176
177private:
178 Q_DISABLE_COPY(View)
179 friend class MouseEventRedirector;
180 void updateNormalGeometry();
181 void sendVisibleChangeEvent();
182 void _setSize(QSize);
183 bool m_inSetParent = false;
184 Qt::WindowFlags m_windowFlags;
185 int m_widgetAttributes = 0; // Qt::WidgetAttribute
186 Qt::FocusPolicy m_focusPolicy = Qt::NoFocus;
187 bool m_mouseTrackingEnabled = false;
188 QRect m_normalGeometry;
189 Qt::WindowStates m_oldWindowState = Qt::WindowState::WindowNoState;
190 MouseEventRedirector *m_mouseEventRedirector = nullptr;
191};
192
193inline View *asView_qtquick(Core::View *view)
194{
195 if (!view)
196 return nullptr;
197 return static_cast<View *>(view);
198}
199
201{
202 if (!controller)
203 return nullptr;
204
205 return static_cast<View *>(controller->view());
206}
207
208inline qreal logicalDpiFactor(const QQuickItem *item)
209{
210#ifndef Q_OS_MACOS
211 if (QQuickWindow *window = item->window()) {
212 if (QScreen *s = window->screen()) {
213 return s->logicalDotsPerInch() / 96.0;
214 }
215 }
216#endif
217
218 // It's always 72 on mac
219 Q_UNUSED(item);
220 return 1;
221}
222
223}
224
225#endif
View * view() const
Returns the view associated with this controller, if any.
static QObject * asQObject(View *)
~View() override=default
ViewType
Each View type also has a specific Controller associated with, except for ViewType::None.
Definition Controller.h:26
DOCKS_EXPORT QQmlContext * qmlContextFor(QQuickItem *)
View * asView_qtquick(Core::View *view)
qreal logicalDpiFactor(const QQuickItem *item)
QQuickItem * asQQuickItem(Core::View *view)
Definition utils.h:161
typedef WindowFlags

© Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/
KDDockWidgets
Advanced Dock Widget Framework for Qt
https://www.kdab.com/development-resources/qt-tools/kddockwidgets/
Generated by doxygen 1.9.8