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
qmainwindowlayout_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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#ifndef QMAINWINDOWLAYOUT_P_H
5#define QMAINWINDOWLAYOUT_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
19#include "qmainwindow.h"
20
21#include "QtWidgets/qlayout.h"
22#if QT_CONFIG(tabbar)
23#include "QtWidgets/qtabbar.h"
24#include "QtGui/qpainter.h"
25#include "QtGui/qevent.h"
26#endif
27#include "QtCore/qbasictimer.h"
28#include "QtCore/qlist.h"
29#include "QtCore/qset.h"
30#include "private/qlayoutengine_p.h"
31#include "private/qwidgetanimator_p.h"
32#if QT_CONFIG(dockwidget)
33#include "private/qdockwidget_p.h"
34
35#include "qdockarealayout_p.h"
36#include "qdockwidget.h"
37#else
38struct QDockWidgetPrivate {
39 enum class DragScope {
40 Group
41 };
42};
43#endif
44#if QT_CONFIG(toolbar)
46#endif
47
48#include <QtCore/qloggingcategory.h>
49#include <QtCore/qpointer.h>
50
52
54
56
57class QToolBar;
58class QRubberBand;
59
60template <typename Layout> // Make use of the "Curiously recurring template pattern"
62{
63 Layout *layout() { return static_cast<Layout *>(this); }
64 const Layout *layout() const { return static_cast<const Layout *>(this); }
65 QWidget *window() { return layout()->parentWidget(); }
66
67public:
68 Q_DISABLE_COPY_MOVE(QMainWindowLayoutSeparatorHelper)
69
71
74
75#if QT_CONFIG(dockwidget)
76
77#if QT_CONFIG(cursor)
78 QCursor separatorCursor(const QList<int> &path);
79 void adjustCursor(const QPoint &pos);
80 QCursor oldCursor;
81 QCursor adjustedCursor;
82 bool hasOldCursor = false;
83 bool cursorAdjusted = false;
84#endif // QT_CONFIG(cursor)
85
86 QList<int> movingSeparator;
87 QPoint movingSeparatorOrigin, movingSeparatorPos;
88 QBasicTimer separatorMoveTimer;
89
90 bool startSeparatorMove(const QPoint &pos);
91 bool separatorMove(const QPoint &pos);
92 bool endSeparatorMove(const QPoint &pos);
93 bool windowEvent(QEvent *e);
94
95#endif // QT_CONFIG(dockwidget)
96
97};
98
99#if QT_CONFIG(dockwidget)
100
101#if QT_CONFIG(cursor)
102template <typename Layout>
104{
105 const QDockAreaLayoutInfo *info = layout()->dockAreaLayoutInfo()->info(path);
106 Q_ASSERT(info != nullptr);
107 if (path.size() == 1) { // is this the "top-level" separator which separates a dock area
108 // from the central widget?
109 switch (path.first()) {
112 return Qt::SplitHCursor;
115 return Qt::SplitVCursor;
116 default:
117 break;
118 }
119 }
120
121 // no, it's a splitter inside a dock area, separating two dock widgets
122
124}
125
126template <typename Layout>
128{
129 QWidget *w = layout()->window();
130 hoverPos = pos;
131
132 if (pos == QPoint(0, 0)) {
133 if (!hoverSeparator.isEmpty())
134 w->update(layout()->dockAreaLayoutInfo()->separatorRect(hoverSeparator));
135 hoverSeparator.clear();
136
137 if (cursorAdjusted) {
138 cursorAdjusted = false;
139 if (hasOldCursor)
140 w->setCursor(oldCursor);
141 else
142 w->unsetCursor();
143 }
144 } else if (movingSeparator.isEmpty()) { // Don't change cursor when moving separator
145 QList<int> pathToSeparator = layout()->dockAreaLayoutInfo()->findSeparator(pos);
146
147 if (pathToSeparator != hoverSeparator) {
148 if (!hoverSeparator.isEmpty())
149 w->update(layout()->dockAreaLayoutInfo()->separatorRect(hoverSeparator));
150
151 hoverSeparator = pathToSeparator;
152
153 if (hoverSeparator.isEmpty()) {
154 if (cursorAdjusted) {
155 cursorAdjusted = false;
156 if (hasOldCursor)
157 w->setCursor(oldCursor);
158 else
159 w->unsetCursor();
160 }
161 } else {
162 w->update(layout()->dockAreaLayoutInfo()->separatorRect(hoverSeparator));
163 if (!cursorAdjusted) {
164 oldCursor = w->cursor();
165 hasOldCursor = w->testAttribute(Qt::WA_SetCursor);
166 }
167 adjustedCursor = separatorCursor(hoverSeparator);
168 w->setCursor(adjustedCursor);
169 cursorAdjusted = true;
170 }
171 }
172 }
173}
174#endif // QT_CONFIG(cursor)
175
176template <typename Layout>
178{
179 QWidget *w = window();
180 switch (event->type()) {
181 case QEvent::Paint: {
182 QPainter p(w);
183 QRegion r = static_cast<QPaintEvent *>(event)->region();
184 layout()->dockAreaLayoutInfo()->paintSeparators(&p, w, r, hoverPos);
185 break;
186 }
187
188#if QT_CONFIG(cursor)
189 case QEvent::HoverMove: {
190 adjustCursor(static_cast<QHoverEvent *>(event)->position().toPoint());
191 break;
192 }
193
194 // We don't want QWidget to call update() on the entire QMainWindow
195 // on HoverEnter and HoverLeave, hence accept the event (return true).
197 return true;
199 adjustCursor(QPoint(0, 0));
200 return true;
201 case QEvent::ShortcutOverride: // when a menu pops up
202 adjustCursor(QPoint(0, 0));
203 break;
204#endif // QT_CONFIG(cursor)
205
207 QMouseEvent *e = static_cast<QMouseEvent *>(event);
208 if (e->button() == Qt::LeftButton && startSeparatorMove(e->position().toPoint())) {
209 // The click was on a separator, eat this event
210 e->accept();
211 return true;
212 }
213 break;
214 }
215
216 case QEvent::MouseMove: {
217 QMouseEvent *e = static_cast<QMouseEvent *>(event);
218
219#if QT_CONFIG(cursor)
220 adjustCursor(e->position().toPoint());
221#endif
222 if (e->buttons() & Qt::LeftButton) {
223 if (separatorMove(e->position().toPoint())) {
224 // We're moving a separator, eat this event
225 e->accept();
226 return true;
227 }
228 }
229
230 break;
231 }
232
234 QMouseEvent *e = static_cast<QMouseEvent *>(event);
235 if (endSeparatorMove(e->position().toPoint())) {
236 // We've released a separator, eat this event
237 e->accept();
238 return true;
239 }
240 break;
241 }
242
243#if QT_CONFIG(cursor)
245 // CursorChange events are triggered as mouse moves to new widgets even
246 // if the cursor doesn't actually change, so do not change oldCursor if
247 // the "changed" cursor has same shape as adjusted cursor.
248 if (cursorAdjusted && adjustedCursor.shape() != w->cursor().shape()) {
249 oldCursor = w->cursor();
250 hasOldCursor = w->testAttribute(Qt::WA_SetCursor);
251
252 // Ensure our adjusted cursor stays visible
253 w->setCursor(adjustedCursor);
254 }
255 break;
256#endif // QT_CONFIG(cursor)
257 case QEvent::Timer:
258 if (static_cast<QTimerEvent *>(event)->timerId() == separatorMoveTimer.timerId()) {
259 // let's move the separators
260 separatorMoveTimer.stop();
261 if (movingSeparator.isEmpty())
262 return true;
263 if (movingSeparatorOrigin == movingSeparatorPos)
264 return true;
265
266 // when moving the separator, we need to update the previous position
267 window()->update(layout()->dockAreaLayoutInfo()->separatorRegion());
268
269 layout()->layoutState = layout()->savedState;
270 layout()->dockAreaLayoutInfo()->separatorMove(movingSeparator, movingSeparatorOrigin,
271 movingSeparatorPos);
272 movingSeparatorPos = movingSeparatorOrigin;
273 return true;
274 }
275 break;
276 default:
277 break;
278 }
279 return false;
280}
281
282template <typename Layout>
284{
285 movingSeparator = layout()->dockAreaLayoutInfo()->findSeparator(pos);
286
287 if (movingSeparator.isEmpty())
288 return false;
289
290 layout()->savedState = layout()->layoutState;
291 movingSeparatorPos = movingSeparatorOrigin = pos;
292
293 return true;
294}
295template <typename Layout>
297{
298 if (movingSeparator.isEmpty())
299 return false;
300 movingSeparatorPos = pos;
301 separatorMoveTimer.start(0, window());
302 return true;
303}
304template <typename Layout>
306{
307 if (movingSeparator.isEmpty())
308 return false;
309 movingSeparator.clear();
310 layout()->savedState.clear();
311 return true;
312}
313
314class Q_AUTOTEST_EXPORT QDockWidgetGroupWindow : public QWidget
315{
317public:
318 explicit QDockWidgetGroupWindow(QWidget *parent = nullptr, Qt::WindowFlags f = {})
319 : QWidget(parent, f)
320 {
321 }
322 QDockAreaLayoutInfo *layoutInfo() const;
323#if QT_CONFIG(tabbar)
324 const QDockAreaLayoutInfo *tabLayoutInfo() const;
325 QDockWidget *activeTabbedDockWidget() const;
326#endif
327 void destroyOrHideIfEmpty();
328 bool hasVisibleDockWidgets() const;
329 void adjustFlags();
330 bool hasNativeDecos() const;
331
332 bool hover(QLayoutItem *widgetItem, const QPoint &mousePos);
333 void updateCurrentGapRect();
334 void restore();
335 void apply();
336 void childEvent(QChildEvent *event) override;
337 void reparent(QDockWidget *dockWidget);
338 void destroyIfSingleItemLeft();
339 QList<QDockWidget *> dockWidgets() const { return findChildren<QDockWidget *>(); }
340
341 QRect currentGapRect;
342 QList<int> currentGapPos;
343
344signals:
345 void resized();
346
347protected:
348 bool event(QEvent *) override;
349 bool eventFilter(QObject *obj, QEvent *event) override;
350 void paintEvent(QPaintEvent*) override;
351
352private:
353 QSize m_removedFrameSize;
354};
355
356// This item will be used in the layout for the gap item. We cannot use QWidgetItem directly
357// because QWidgetItem functions return an empty size for widgets that are floating.
358class QDockWidgetGroupWindowItem : public QWidgetItem
359{
360public:
361 explicit QDockWidgetGroupWindowItem(QDockWidgetGroupWindow *parent) : QWidgetItem(parent) {}
362
363 // when the item contains a dock widget, obtain its size (to prevent infinite loop)
364 // ask the layout otherwise
365 QSize minimumSize() const override
366 {
367 if (auto dw = widget()->findChild<QDockWidget *>())
368 return dw->minimumSize();
369 return lay()->minimumSize();
370 }
371 QSize maximumSize() const override
372 {
373 auto dw = widget()->findChild<QDockWidget *>();
374 if (dw)
375 return dw->maximumSize();
376 return lay()->maximumSize();
377 }
378 QSize sizeHint() const override
379 {
380 auto dw = widget()->findChild<QDockWidget *>();
381 if (dw)
382 return dw->sizeHint();
383 return lay()->sizeHint();
384 }
385 QWidget* widget() const override { return wid; }
386
387private:
388 QLayout *lay() const { return const_cast<QDockWidgetGroupWindowItem *>(this)->widget()->layout(); }
389};
390#endif // QT_CONFIG(dockwidget)
391
392/* This data structure represents the state of all the tool-bars and dock-widgets. It's value based
393 so it can be easily copied into a temporary variable. All operations are performed without moving
394 any widgets. Only when we are sure we have the desired state, we call apply(), which moves the
395 widgets.
396*/
397
399{
400public:
403
405
406#if QT_CONFIG(toolbar)
407 QToolBarAreaLayout toolBarAreaLayout;
408#endif
409
410#if QT_CONFIG(dockwidget)
411 QDockAreaLayout dockAreaLayout;
412#else
415#endif
416
417 void apply(bool animated);
418 void deleteAllLayoutItems();
419 void deleteCentralWidgetItem();
420
421 QSize sizeHint() const;
422 QSize minimumSize() const;
423 bool fits() const;
424 void fitLayout();
425
426 QLayoutItem *itemAt(int index, int *x) const;
427 QLayoutItem *takeAt(int index, int *x);
428 QList<int> indexOf(QWidget *widget) const;
429 QLayoutItem *item(const QList<int> &path);
430 QRect itemRect(const QList<int> &path) const;
431 QRect gapRect(const QList<int> &path) const; // ### get rid of this, use itemRect() instead
432
433 bool contains(QWidget *widget) const;
434
435 void setCentralWidget(QWidget *widget);
436 QWidget *centralWidget() const;
437
438 QList<int> gapIndex(QWidget *widget, const QPoint &pos) const;
439 bool insertGap(const QList<int> &path, QLayoutItem *item);
440 void remove(const QList<int> &path);
441 void remove(QLayoutItem *item);
442 void clear();
443 bool isValid() const;
444
445 QLayoutItem *plug(const QList<int> &path);
446 QLayoutItem *unplug(const QList<int> &path, QMainWindowLayoutState *savedState = nullptr);
447
448 void saveState(QDataStream &stream) const;
449 bool checkFormat(QDataStream &stream);
450 bool restoreState(QDataStream &stream, const QMainWindowLayoutState &oldState);
451};
452
453class QMainWindowTabBar;
455 : public QLayout,
456 public QMainWindowLayoutSeparatorHelper<QMainWindowLayout>
457{
459
460public:
462 std::unique_ptr<QMainWindowLayoutState> restoredState;
463
464 QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLayout);
466
467 QMainWindow::DockOptions dockOptions;
468 void setDockOptions(QMainWindow::DockOptions opts);
469
471
472 // status bar
473#if QT_CONFIG(statusbar)
474 QStatusBar *statusBar() const;
475 void setStatusBar(QStatusBar *sb);
476#endif
477
478 // central widget
479 QWidget *centralWidget() const;
480 void setCentralWidget(QWidget *cw);
481
482 // toolbars
483#if QT_CONFIG(toolbar)
484 void addToolBarBreak(Qt::ToolBarArea area);
485 void insertToolBarBreak(QToolBar *before);
486 void removeToolBarBreak(QToolBar *before);
487
488 void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar, bool needAddChildWidget = true);
489 void insertToolBar(QToolBar *before, QToolBar *toolbar);
490 Qt::ToolBarArea toolBarArea(const QToolBar *toolbar) const;
491 bool toolBarBreak(QToolBar *toolBar) const;
492 void getStyleOptionInfo(QStyleOptionToolBar *option, QToolBar *toolBar) const;
493 void removeToolBar(QToolBar *toolbar);
494 void toggleToolBarsVisible();
495 void moveToolBar(QToolBar *toolbar, int pos);
496#endif
497
498 // dock widgets
499#if QT_CONFIG(dockwidget)
500 void setCorner(Qt::Corner corner, Qt::DockWidgetArea area);
501 Qt::DockWidgetArea corner(Qt::Corner corner) const;
502 enum DockWidgetAreaSize {Visible, Maximum};
503 QRect dockWidgetAreaRect(Qt::DockWidgetArea area, DockWidgetAreaSize size = Maximum) const;
504 void addDockWidget(Qt::DockWidgetArea area,
505 QDockWidget *dockwidget,
506 Qt::Orientation orientation);
507 void splitDockWidget(QDockWidget *after,
508 QDockWidget *dockwidget,
509 Qt::Orientation orientation);
510 Qt::DockWidgetArea dockWidgetArea(QWidget* widget) const;
511 bool restoreDockWidget(QDockWidget *dockwidget);
512#if QT_CONFIG(tabbar)
513 void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
514 void raise(QDockWidget *widget);
515 void setVerticalTabsEnabled(bool enabled);
516
517 QDockAreaLayoutInfo *dockInfo(QWidget *w);
518 bool _documentMode;
519 bool documentMode() const;
520 void setDocumentMode(bool enabled);
521
522 QTabBar *getTabBar();
523 QSet<QTabBar*> usedTabBars;
524 QList<QTabBar*> unusedTabBars;
525 bool verticalTabsEnabled;
526
527 QWidget *getSeparatorWidget();
528 QSet<QWidget*> usedSeparatorWidgets;
529 QList<QWidget*> unusedSeparatorWidgets;
530 int sep; // separator extent
531
532#if QT_CONFIG(tabwidget)
534 QTabWidget::TabShape _tabShape;
535
536 QTabWidget::TabShape tabShape() const;
537 void setTabShape(QTabWidget::TabShape tabShape);
539 void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition);
540
541 QDockWidgetGroupWindow *createTabbedDockWindow();
542#endif // QT_CONFIG(tabwidget)
543#endif // QT_CONFIG(tabbar)
544
545 QDockAreaLayout *dockAreaLayoutInfo() { return &layoutState.dockAreaLayout; }
546 void keepSize(QDockWidget *w);
547#endif // QT_CONFIG(dockwidget)
548
549 // save/restore
550 enum VersionMarkers { // sentinel values used to validate state data
551 VersionMarker = 0xff
552 };
553 void saveState(QDataStream &stream) const;
554 bool restoreState(QDataStream &stream);
556
557 // QLayout interface
558 void addItem(QLayoutItem *item) override;
559 void setGeometry(const QRect &r) override;
560 QLayoutItem *itemAt(int index) const override;
561 QLayoutItem *takeAt(int index) override;
562 int count() const override;
563
564 QSize sizeHint() const override;
565 QSize minimumSize() const override;
566 mutable QSize szHint;
567 mutable QSize minSize;
568 void invalidate() override;
569
570 // animations
572 QList<int> currentGapPos;
575#if QT_CONFIG(rubberband)
576 QPointer<QRubberBand> gapIndicator;
577#endif
578#if QT_CONFIG(dockwidget)
579 QPointer<QDockWidgetGroupWindow> currentHoveredFloat; // set when dragging over a floating dock widget
580 void setCurrentHoveredFloat(QDockWidgetGroupWindow *w);
581#if QT_CONFIG(tabbar)
582 bool isDockWidgetTabbed(const QDockWidget *dockWidget) const;
583 QList<QDockWidget *> tabifiedDockWidgets(const QDockWidget *dockWidget) const;
584 QMainWindowTabBar *findTabBar(const QDockWidget *dockWidget) const;
585#endif
586#endif
587 bool isInApplyState = false;
588
589 void hover(QLayoutItem *hoverTarget, const QPoint &mousePos);
590 bool plug(QLayoutItem *widgetItem);
592 void revert(QLayoutItem *widgetItem);
593 void applyState(QMainWindowLayoutState &newState, bool animate = true);
594 void applyRestoredState();
595 void restore(bool keepSavedState = false);
596 void animationFinished(QWidget *widget);
597
598#if QT_CONFIG(draganddrop)
599 static bool needsPlatformDrag();
600 Qt::DropAction performPlatformWidgetDrag(QLayoutItem *widgetItem, const QPoint &pressPosition);
601 QLayoutItem *draggingWidget = nullptr;
602#endif
603
604protected:
605 void timerEvent(QTimerEvent *e) override;
606
607private Q_SLOTS:
608 void updateGapIndicator();
609#if QT_CONFIG(dockwidget)
610#if QT_CONFIG(tabbar)
611 void tabChanged();
612 void tabMoved(int from, int to);
613#endif
614#endif
615private:
616#if QT_CONFIG(tabbar)
617 void updateTabBarShapes();
618#endif
619 bool isInRestoreState = false;
620};
621
622#if QT_CONFIG(dockwidget) && !defined(QT_NO_DEBUG_STREAM)
623class QDebug;
626#endif
627
629
630#endif // QMAINWINDOWLAYOUT_P_H
\inmodule QtCore
Definition qbasictimer.h:18
\inmodule QtCore
Definition qcoreevent.h:379
The QCursor class provides a mouse cursor with an arbitrary shape.
Definition qcursor.h:45
\inmodule QtCore\reentrant
Definition qdatastream.h:46
\inmodule QtCore
The QDockWidget class provides a widget that can be docked inside a QMainWindow or floated as a top-l...
Definition qdockwidget.h:20
\inmodule QtCore
Definition qcoreevent.h:45
@ ShortcutOverride
Definition qcoreevent.h:158
@ CursorChange
Definition qcoreevent.h:228
@ MouseMove
Definition qcoreevent.h:63
@ MouseButtonPress
Definition qcoreevent.h:60
@ HoverLeave
Definition qcoreevent.h:176
@ HoverEnter
Definition qcoreevent.h:175
@ HoverMove
Definition qcoreevent.h:177
@ MouseButtonRelease
Definition qcoreevent.h:61
void accept()
Sets the accept flag of the event object, the equivalent of calling setAccepted(true).
Definition qcoreevent.h:310
\inmodule QtGui
Definition qevent.h:246
The QLayoutItem class provides an abstract item that a QLayout manipulates.
Definition qlayoutitem.h:25
The QLayout class is the base class of geometry managers.
Definition qlayout.h:26
void update()
Updates the layout for parentWidget().
Definition qlayout.cpp:971
Definition qlist.h:75
QBasicTimer discardRestoredStateTimer
QWidgetAnimator widgetAnimator
std::unique_ptr< QMainWindowLayoutState > restoredState
QMainWindow::DockOptions dockOptions
QMainWindowLayoutState layoutState
The QMainWindow class provides a main application window.
Definition qmainwindow.h:25
\inmodule QtGui
Definition qevent.h:196
\inmodule QtCore
Definition qobject.h:103
T findChild(QAnyStringView aName, Qt::FindChildOptions options=Qt::FindChildrenRecursively) const
Returns the child of this object that can be cast into type T and that is called name,...
Definition qobject.h:155
The QPaintEvent class contains event parameters for paint events.
Definition qevent.h:486
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
constexpr QPoint toPoint() const
Rounds the coordinates of this point to the nearest integer, and returns a QPoint object with the rou...
Definition qpoint.h:404
\inmodule QtCore\reentrant
Definition qpoint.h:25
\inmodule QtCore\reentrant
Definition qrect.h:30
The QRegion class specifies a clip region for a painter.
Definition qregion.h:27
The QRubberBand class provides a rectangle or line that can indicate a selection or a boundary.
Definition qrubberband.h:18
QPointF position() const
Returns the position of the point in this event, relative to the widget or item that received the eve...
Definition qevent.h:119
Qt::MouseButton button() const
Returns the button that caused the event.
Definition qevent.h:116
Qt::MouseButtons buttons() const
Returns the button state when the event was generated.
Definition qevent.h:117
\inmodule QtCore
Definition qsize.h:25
The QStatusBar class provides a horizontal bar suitable for presenting status information.
Definition qstatusbar.h:17
The QTabBar class provides a tab bar, e.g.
Definition qtabbar.h:19
TabPosition
This enum type defines where QTabWidget draws the tab row:
Definition qtabwidget.h:74
TabShape
This enum type defines the shape of the tabs: \value Rounded The tabs are drawn with a rounded look.
Definition qtabwidget.h:85
\inmodule QtCore
Definition qcoreevent.h:366
int timerId() const
Returns the unique timer identifier, which is the same identifier as returned from QObject::startTime...
Definition qcoreevent.h:370
The QToolBar class provides a movable panel that contains a set of controls.
Definition qtoolbar.h:23
The QWidgetItem class is a layout item that represents a widget.
Definition qlayoutitem.h:86
The QWidget class is the base class of all user interface objects.
Definition qwidget.h:99
QLayout * layout() const
Returns the layout manager that is installed on this widget, or \nullptr if no layout manager is inst...
QSize maximumSize
the widget's maximum size in pixels
Definition qwidget.h:121
QSize sizeHint
the recommended size for the widget
Definition qwidget.h:148
QOpenGLWidget * widget
[1]
b clear()
void newState(QList< State > &states, const char *token, const char *lexem, bool pre)
ApplyOptions apply
Combined button and popup list for selecting options.
DockWidgetArea
@ LeftButton
Definition qnamespace.h:58
@ WA_SetCursor
Definition qnamespace.h:305
ToolBarArea
Orientation
Definition qnamespace.h:98
@ Horizontal
Definition qnamespace.h:99
@ SplitVCursor
@ SplitHCursor
DropAction
EGLStreamKHR stream
static int area(const QSize &s)
Definition qicon.cpp:153
#define Q_DECLARE_LOGGING_CATEGORY(name)
static bool contains(const QJsonArray &haystack, unsigned needle)
Definition qopengl.cpp:116
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint index
[2]
GLboolean r
[2]
GLenum GLenum GLsizei count
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLfloat GLfloat f
GLint first
struct _cl_event * event
GLhandleARB obj
[2]
GLsizei const GLchar *const * path
GLfloat GLfloat p
[1]
GLuint GLenum option
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static constexpr QChar sep
static const struct TessellationWindingOrderTab cw[]
#define Q_AUTOTEST_EXPORT
#define QT_REQUIRE_CONFIG(feature)
#define Q_OBJECT
#define Q_SLOTS
#define signals
QWidget * win
Definition settings.cpp:6
settings remove("monkey")
QDataStream & operator<<(QDataStream &out, const MyClass &myObj)
[4]
QVBoxLayout * layout
list indexOf("B")
scene addItem(form)
QGraphicsItem * item
aWidget window() -> setWindowTitle("New Window Title")
[2]
QDockWidget * dockWidget
[0]
statusBar() -> addWidget(new MyReadWriteIndication)
[0]
QHostInfo info
[0]