1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtWidgets module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QGRAPHICSPROXYWIDGET_H
41#define QGRAPHICSPROXYWIDGET_H
42
43#include <QtWidgets/qtwidgetsglobal.h>
44#include <QtWidgets/qgraphicswidget.h>
45
46QT_REQUIRE_CONFIG(graphicsview);
47
48QT_BEGIN_NAMESPACE
49
50class QGraphicsProxyWidgetPrivate;
51
52class Q_WIDGETS_EXPORT QGraphicsProxyWidget : public QGraphicsWidget
53{
54 Q_OBJECT
55public:
56 QGraphicsProxyWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags());
57 ~QGraphicsProxyWidget();
58
59 void setWidget(QWidget *widget);
60 QWidget *widget() const;
61
62 QRectF subWidgetRect(const QWidget *widget) const;
63
64 void setGeometry(const QRectF &rect) override;
65
66 void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
67
68 enum {
69 Type = 12
70 };
71 int type() const override;
72
73 QGraphicsProxyWidget *createProxyForChildWidget(QWidget *child);
74
75protected:
76 QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
77
78 bool event(QEvent *event) override;
79 bool eventFilter(QObject *object, QEvent *event) override;
80
81 void showEvent(QShowEvent *event) override;
82 void hideEvent(QHideEvent *event) override;
83
84#ifndef QT_NO_CONTEXTMENU
85 void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
86#endif
87
88#if QT_CONFIG(draganddrop)
89 void dragEnterEvent(QGraphicsSceneDragDropEvent *event) override;
90 void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) override;
91 void dragMoveEvent(QGraphicsSceneDragDropEvent *event) override;
92 void dropEvent(QGraphicsSceneDragDropEvent *event) override;
93#endif
94
95 void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
96 void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
97 void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
98 void grabMouseEvent(QEvent *event) override;
99 void ungrabMouseEvent(QEvent *event) override;
100
101 void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
102 void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
103 void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
104 void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override;
105#if QT_CONFIG(wheelevent)
106 void wheelEvent(QGraphicsSceneWheelEvent *event) override;
107#endif
108
109 void keyPressEvent(QKeyEvent *event) override;
110 void keyReleaseEvent(QKeyEvent *event) override;
111
112 void focusInEvent(QFocusEvent *event) override;
113 void focusOutEvent(QFocusEvent *event) override;
114 bool focusNextPrevChild(bool next) override;
115
116 QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
117 void inputMethodEvent(QInputMethodEvent *event) override;
118
119 QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override;
120 void resizeEvent(QGraphicsSceneResizeEvent *event) override;
121
122protected Q_SLOTS:
123 QGraphicsProxyWidget *newProxyWidget(const QWidget *);
124
125private:
126 Q_DISABLE_COPY(QGraphicsProxyWidget)
127 Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QGraphicsProxyWidget)
128 Q_PRIVATE_SLOT(d_func(), void _q_removeWidgetSlot())
129
130 friend class QWidget;
131 friend class QWidgetPrivate;
132 friend class QGraphicsItem;
133};
134
135QT_END_NAMESPACE
136
137#endif
138