Qt 6.x
The Qt SDK
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 QDYNAMICMAINWINDOWLAYOUT_P_H
5#define QDYNAMICMAINWINDOWLAYOUT_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
33#if QT_CONFIG(dockwidget)
34#include "qdockarealayout_p.h"
35#include "qdockwidget.h"
36#endif
37#if QT_CONFIG(toolbar)
39#endif
40#include <QtCore/qloggingcategory.h>
41
43
45
47
48class QToolBar;
49class QRubberBand;
50
51template <typename Layout> // Make use of the "Curiously recurring template pattern"
53{
54 Layout *layout() { return static_cast<Layout *>(this); }
55 const Layout *layout() const { return static_cast<const Layout *>(this); }
56 QWidget *window() { return layout()->parentWidget(); }
57
58public:
59 Q_DISABLE_COPY_MOVE(QMainWindowLayoutSeparatorHelper)
60
62
65
66#if QT_CONFIG(dockwidget)
67
68#if QT_CONFIG(cursor)
69 QCursor separatorCursor(const QList<int> &path);
70 void adjustCursor(const QPoint &pos);
71 QCursor oldCursor;
72 QCursor adjustedCursor;
73 bool hasOldCursor = false;
74 bool cursorAdjusted = false;
75#endif // QT_CONFIG(cursor)
76
77 QList<int> movingSeparator;
78 QPoint movingSeparatorOrigin, movingSeparatorPos;
79 QBasicTimer separatorMoveTimer;
80
81 bool startSeparatorMove(const QPoint &pos);
82 bool separatorMove(const QPoint &pos);
83 bool endSeparatorMove(const QPoint &pos);
84 bool windowEvent(QEvent *e);
85
86#endif // QT_CONFIG(dockwidget)
87
88};
89
90#if QT_CONFIG(dockwidget)
91
92#if QT_CONFIG(cursor)
93template <typename Layout>
95{
96 const QDockAreaLayoutInfo *info = layout()->dockAreaLayoutInfo()->info(path);
97 Q_ASSERT(info != nullptr);
98 if (path.size() == 1) { // is this the "top-level" separator which separates a dock area
99 // from the central widget?
100 switch (path.first()) {
103 return Qt::SplitHCursor;
106 return Qt::SplitVCursor;
107 default:
108 break;
109 }
110 }
111
112 // no, it's a splitter inside a dock area, separating two dock widgets
113
115}
116
117template <typename Layout>
119{
120 QWidget *w = layout()->window();
121 hoverPos = pos;
122
123 if (pos == QPoint(0, 0)) {
124 if (!hoverSeparator.isEmpty())
125 w->update(layout()->dockAreaLayoutInfo()->separatorRect(hoverSeparator));
126 hoverSeparator.clear();
127
128 if (cursorAdjusted) {
129 cursorAdjusted = false;
130 if (hasOldCursor)
131 w->setCursor(oldCursor);
132 else
133 w->unsetCursor();
134 }
135 } else if (movingSeparator.isEmpty()) { // Don't change cursor when moving separator
136 QList<int> pathToSeparator = layout()->dockAreaLayoutInfo()->findSeparator(pos);
137
138 if (pathToSeparator != hoverSeparator) {
139 if (!hoverSeparator.isEmpty())
140 w->update(layout()->dockAreaLayoutInfo()->separatorRect(hoverSeparator));
141
142 hoverSeparator = pathToSeparator;
143
144 if (hoverSeparator.isEmpty()) {
145 if (cursorAdjusted) {
146 cursorAdjusted = false;
147 if (hasOldCursor)
148 w->setCursor(oldCursor);
149 else
150 w->unsetCursor();
151 }
152 } else {
153 w->update(layout()->dockAreaLayoutInfo()->separatorRect(hoverSeparator));
154 if (!cursorAdjusted) {
155 oldCursor = w->cursor();
156 hasOldCursor = w->testAttribute(Qt::WA_SetCursor);
157 }
158 adjustedCursor = separatorCursor(hoverSeparator);
159 w->setCursor(adjustedCursor);
160 cursorAdjusted = true;
161 }
162 }
163 }
164}
165#endif // QT_CONFIG(cursor)
166
167template <typename Layout>
169{
170 QWidget *w = window();
171 switch (event->type()) {
172 case QEvent::Paint: {
173 QPainter p(w);
174 QRegion r = static_cast<QPaintEvent *>(event)->region();
175 layout()->dockAreaLayoutInfo()->paintSeparators(&p, w, r, hoverPos);
176 break;
177 }
178
179#if QT_CONFIG(cursor)
180 case QEvent::HoverMove: {
181 adjustCursor(static_cast<QHoverEvent *>(event)->position().toPoint());
182 break;
183 }
184
185 // We don't want QWidget to call update() on the entire QMainWindow
186 // on HoverEnter and HoverLeave, hence accept the event (return true).
188 return true;
190 adjustCursor(QPoint(0, 0));
191 return true;
192 case QEvent::ShortcutOverride: // when a menu pops up
193 adjustCursor(QPoint(0, 0));
194 break;
195#endif // QT_CONFIG(cursor)
196
198 QMouseEvent *e = static_cast<QMouseEvent *>(event);
199 if (e->button() == Qt::LeftButton && startSeparatorMove(e->position().toPoint())) {
200 // The click was on a separator, eat this event
201 e->accept();
202 return true;
203 }
204 break;
205 }
206
207 case QEvent::MouseMove: {
208 QMouseEvent *e = static_cast<QMouseEvent *>(event);
209
210#if QT_CONFIG(cursor)
211 adjustCursor(e->position().toPoint());
212#endif
213 if (e->buttons() & Qt::LeftButton) {
214 if (separatorMove(e->position().toPoint())) {
215 // We're moving a separator, eat this event
216 e->accept();
217 return true;
218 }
219 }
220
221 break;
222 }
223
225 QMouseEvent *e = static_cast<QMouseEvent *>(event);
226 if (endSeparatorMove(e->position().toPoint())) {
227 // We've released a separator, eat this event
228 e->accept();
229 return true;
230 }
231 break;
232 }
233
234#if QT_CONFIG(cursor)
236 // CursorChange events are triggered as mouse moves to new widgets even
237 // if the cursor doesn't actually change, so do not change oldCursor if
238 // the "changed" cursor has same shape as adjusted cursor.
239 if (cursorAdjusted && adjustedCursor.shape() != w->cursor().shape()) {
240 oldCursor = w->cursor();
241 hasOldCursor = w->testAttribute(Qt::WA_SetCursor);
242
243 // Ensure our adjusted cursor stays visible
244 w->setCursor(adjustedCursor);
245 }
246 break;
247#endif // QT_CONFIG(cursor)
248 case QEvent::Timer:
249 if (static_cast<QTimerEvent *>(event)->timerId() == separatorMoveTimer.timerId()) {
250 // let's move the separators
251 separatorMoveTimer.stop();
252 if (movingSeparator.isEmpty())
253 return true;
254 if (movingSeparatorOrigin == movingSeparatorPos)
255 return true;
256
257 // when moving the separator, we need to update the previous position
258 window()->update(layout()->dockAreaLayoutInfo()->separatorRegion());
259
260 layout()->layoutState = layout()->savedState;
261 layout()->dockAreaLayoutInfo()->separatorMove(movingSeparator, movingSeparatorOrigin,
262 movingSeparatorPos);
263 movingSeparatorPos = movingSeparatorOrigin;
264 return true;
265 }
266 break;
267 default:
268 break;
269 }
270 return false;
271}
272
273template <typename Layout>
275{
276 movingSeparator = layout()->dockAreaLayoutInfo()->findSeparator(pos);
277
278 if (movingSeparator.isEmpty())
279 return false;
280
281 layout()->savedState = layout()->layoutState;
282 movingSeparatorPos = movingSeparatorOrigin = pos;
283
284 return true;
285}
286template <typename Layout>
288{
289 if (movingSeparator.isEmpty())
290 return false;
291 movingSeparatorPos = pos;
292 separatorMoveTimer.start(0, window());
293 return true;
294}
295template <typename Layout>
297{
298 if (movingSeparator.isEmpty())
299 return false;
300 movingSeparator.clear();
301 layout()->savedState.clear();
302 return true;
303}
304
305class Q_AUTOTEST_EXPORT QDockWidgetGroupWindow : public QWidget
306{
308public:
309 explicit QDockWidgetGroupWindow(QWidget *parent = nullptr, Qt::WindowFlags f = {})
310 : QWidget(parent, f)
311 {
312 }
313 QDockAreaLayoutInfo *layoutInfo() const;
314#if QT_CONFIG(tabbar)
315 const QDockAreaLayoutInfo *tabLayoutInfo() const;
316 QDockWidget *activeTabbedDockWidget() const;
317#endif
318 void destroyOrHideIfEmpty();
319 void adjustFlags();
320 bool hasNativeDecos() const;
321
322 bool hover(QLayoutItem *widgetItem, const QPoint &mousePos);
323 void updateCurrentGapRect();
324 void restore();
325 void apply();
326
327 QRect currentGapRect;
328 QList<int> currentGapPos;
329
330signals:
331 void resized();
332
333protected:
334 bool event(QEvent *) override;
335 void paintEvent(QPaintEvent*) override;
336
337private:
338 QSize m_removedFrameSize;
339};
340
341// This item will be used in the layout for the gap item. We cannot use QWidgetItem directly
342// because QWidgetItem functions return an empty size for widgets that are floating.
343class QDockWidgetGroupWindowItem : public QWidgetItem
344{
345public:
346 explicit QDockWidgetGroupWindowItem(QDockWidgetGroupWindow *parent) : QWidgetItem(parent) {}
347
348 // when the item contains a dock widget, obtain its size (to prevent infinite loop)
349 // ask the layout otherwise
350 QSize minimumSize() const override
351 {
352 if (auto dw = widget()->findChild<QDockWidget *>())
353 return dw->minimumSize();
354 return lay()->minimumSize();
355 }
356 QSize maximumSize() const override
357 {
358 auto dw = widget()->findChild<QDockWidget *>();
359 if (dw)
360 return dw->maximumSize();
361 return lay()->maximumSize();
362 }
363 QSize sizeHint() const override
364 {
365 auto dw = widget()->findChild<QDockWidget *>();
366 if (dw)
367 return dw->sizeHint();
368 return lay()->sizeHint();
369 }
370 QWidget* widget() const override { return wid; }
371
372private:
373 QLayout *lay() const { return const_cast<QDockWidgetGroupWindowItem *>(this)->widget()->layout(); }
374};
375#endif // QT_CONFIG(dockwidget)
376
377/* This data structure represents the state of all the tool-bars and dock-widgets. It's value based
378 so it can be easily copied into a temporary variable. All operations are performed without moving
379 any widgets. Only when we are sure we have the desired state, we call apply(), which moves the
380 widgets.
381*/
382
384{
385public:
388
390
391#if QT_CONFIG(toolbar)
392 QToolBarAreaLayout toolBarAreaLayout;
393#endif
394
395#if QT_CONFIG(dockwidget)
396 QDockAreaLayout dockAreaLayout;
397#else
400#endif
401
402 void apply(bool animated);
403 void deleteAllLayoutItems();
404 void deleteCentralWidgetItem();
405
406 QSize sizeHint() const;
407 QSize minimumSize() const;
408 bool fits() const;
409 void fitLayout();
410
411 QLayoutItem *itemAt(int index, int *x) const;
412 QLayoutItem *takeAt(int index, int *x);
415 QRect itemRect(const QList<int> &path) const;
416 QRect gapRect(const QList<int> &path) const; // ### get rid of this, use itemRect() instead
417
418 bool contains(QWidget *widget) const;
419
420 void setCentralWidget(QWidget *widget);
421 QWidget *centralWidget() const;
422
423 QList<int> gapIndex(QWidget *widget, const QPoint &pos) const;
424 bool insertGap(const QList<int> &path, QLayoutItem *item);
425 void remove(const QList<int> &path);
426 void remove(QLayoutItem *item);
427 void clear();
428 bool isValid() const;
429
430 QLayoutItem *plug(const QList<int> &path);
431 QLayoutItem *unplug(const QList<int> &path, QMainWindowLayoutState *savedState = nullptr);
432
433 void saveState(QDataStream &stream) const;
434 bool checkFormat(QDataStream &stream);
435 bool restoreState(QDataStream &stream, const QMainWindowLayoutState &oldState);
436};
437
439 : public QLayout,
440 public QMainWindowLayoutSeparatorHelper<QMainWindowLayout>
441{
443
444public:
446 std::unique_ptr<QMainWindowLayoutState> restoredState;
447
448 QMainWindowLayout(QMainWindow *mainwindow, QLayout *parentLayout);
450
451 QMainWindow::DockOptions dockOptions;
452 void setDockOptions(QMainWindow::DockOptions opts);
453
455
456 // status bar
457#if QT_CONFIG(statusbar)
458 QStatusBar *statusBar() const;
459 void setStatusBar(QStatusBar *sb);
460#endif
461
462 // central widget
463 QWidget *centralWidget() const;
464 void setCentralWidget(QWidget *cw);
465
466 // toolbars
467#if QT_CONFIG(toolbar)
468 void addToolBarBreak(Qt::ToolBarArea area);
469 void insertToolBarBreak(QToolBar *before);
470 void removeToolBarBreak(QToolBar *before);
471
472 void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar, bool needAddChildWidget = true);
473 void insertToolBar(QToolBar *before, QToolBar *toolbar);
474 Qt::ToolBarArea toolBarArea(const QToolBar *toolbar) const;
475 bool toolBarBreak(QToolBar *toolBar) const;
476 void getStyleOptionInfo(QStyleOptionToolBar *option, QToolBar *toolBar) const;
477 void removeToolBar(QToolBar *toolbar);
478 void toggleToolBarsVisible();
479 void moveToolBar(QToolBar *toolbar, int pos);
480#endif
481
482 // dock widgets
483#if QT_CONFIG(dockwidget)
484 void setCorner(Qt::Corner corner, Qt::DockWidgetArea area);
485 Qt::DockWidgetArea corner(Qt::Corner corner) const;
486 enum DockWidgetAreaSize {Visible, Maximum};
487 QRect dockWidgetAreaRect(Qt::DockWidgetArea area, DockWidgetAreaSize size = Maximum) const;
488 void addDockWidget(Qt::DockWidgetArea area,
489 QDockWidget *dockwidget,
490 Qt::Orientation orientation);
491 void splitDockWidget(QDockWidget *after,
492 QDockWidget *dockwidget,
493 Qt::Orientation orientation);
494 Qt::DockWidgetArea dockWidgetArea(QWidget* widget) const;
495 bool restoreDockWidget(QDockWidget *dockwidget);
496#if QT_CONFIG(tabbar)
497 void tabifyDockWidget(QDockWidget *first, QDockWidget *second);
498 void raise(QDockWidget *widget);
499 void setVerticalTabsEnabled(bool enabled);
500
501 QDockAreaLayoutInfo *dockInfo(QWidget *w);
502 bool _documentMode;
503 bool documentMode() const;
504 void setDocumentMode(bool enabled);
505
506 QTabBar *getTabBar();
507 QSet<QTabBar*> usedTabBars;
508 QList<QTabBar*> unusedTabBars;
509 bool verticalTabsEnabled;
510
511 QWidget *getSeparatorWidget();
512 QSet<QWidget*> usedSeparatorWidgets;
513 QList<QWidget*> unusedSeparatorWidgets;
514 int sep; // separator extent
515
516#if QT_CONFIG(tabwidget)
518 QTabWidget::TabShape _tabShape;
519
520 QTabWidget::TabShape tabShape() const;
521 void setTabShape(QTabWidget::TabShape tabShape);
523 void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition);
524
525 QDockWidgetGroupWindow *createTabbedDockWindow();
526#endif // QT_CONFIG(tabwidget)
527#endif // QT_CONFIG(tabbar)
528
529 QDockAreaLayout *dockAreaLayoutInfo() { return &layoutState.dockAreaLayout; }
530 void keepSize(QDockWidget *w);
531#endif // QT_CONFIG(dockwidget)
532
533 // save/restore
534 enum VersionMarkers { // sentinel values used to validate state data
535 VersionMarker = 0xff
536 };
537 void saveState(QDataStream &stream) const;
538 bool restoreState(QDataStream &stream);
540
541 // QLayout interface
542 void addItem(QLayoutItem *item) override;
543 void setGeometry(const QRect &r) override;
544 QLayoutItem *itemAt(int index) const override;
545 QLayoutItem *takeAt(int index) override;
546 int count() const override;
547
548 QSize sizeHint() const override;
549 QSize minimumSize() const override;
550 mutable QSize szHint;
551 mutable QSize minSize;
552 void invalidate() override;
553
554 // animations
559#if QT_CONFIG(rubberband)
560 QPointer<QRubberBand> gapIndicator;
561#endif
562#if QT_CONFIG(dockwidget)
563 QPointer<QDockWidgetGroupWindow> currentHoveredFloat; // set when dragging over a floating dock widget
564 void setCurrentHoveredFloat(QDockWidgetGroupWindow *w);
565#endif
566 bool isInApplyState = false;
567
568 void hover(QLayoutItem *hoverTarget, const QPoint &mousePos);
569 bool plug(QLayoutItem *widgetItem);
570 QLayoutItem *unplug(QWidget *widget, bool group = false);
571 void revert(QLayoutItem *widgetItem);
572 void applyState(QMainWindowLayoutState &newState, bool animate = true);
573 void restore(bool keepSavedState = false);
574 void animationFinished(QWidget *widget);
575
576#if QT_CONFIG(draganddrop)
577 static bool needsPlatformDrag();
578 Qt::DropAction performPlatformWidgetDrag(QLayoutItem *widgetItem, const QPoint &pressPosition);
579 QLayoutItem *draggingWidget = nullptr;
580#endif
581
582protected:
583 void timerEvent(QTimerEvent *e) override;
584
585private Q_SLOTS:
586 void updateGapIndicator();
587#if QT_CONFIG(dockwidget)
588#if QT_CONFIG(tabbar)
589 void tabChanged();
590 void tabMoved(int from, int to);
591#endif
592#endif
593private:
594#if QT_CONFIG(tabbar)
595 void updateTabBarShapes();
596#endif
597 bool isInRestoreState = false;
598};
599
600#if QT_CONFIG(dockwidget) && !defined(QT_NO_DEBUG_STREAM)
601class QDebug;
604#endif
605
607
608#endif // QDYNAMICMAINWINDOWLAYOUT_P_H
\inmodule QtCore
Definition qbasictimer.h:18
The QCursor class provides a mouse cursor with an arbitrary shape.
Definition qcursor.h:45
\inmodule QtCore\reentrant
Definition qdatastream.h:30
\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
\inmodule QtGui
Definition qevent.h:245
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:970
Definition qlist.h:74
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:195
T findChild(const QString &aName=QString(), 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:133
virtual void timerEvent(QTimerEvent *event)
This event handler can be reimplemented in a subclass to receive timer events for the object.
Definition qobject.cpp:1433
The QPaintEvent class contains event parameters for paint events.
Definition qevent.h:485
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
\inmodule QtCore\reentrant
Definition qpoint.h:23
\inmodule QtCore
Definition qpointer.h:18
\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
Definition qset.h:18
\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:359
int timerId() const
Returns the unique timer identifier, which is the same identifier as returned from QObject::startTime...
Definition qcoreevent.h:363
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
QSize sizeHint() const override
\reimp
QWidget * widget() const override
Returns the widget managed by this item.
QWidget * wid
QSize maximumSize() const override
\reimp
QSize minimumSize() const override
\reimp
The QWidget class is the base class of all user interface objects.
Definition qwidget.h:99
void setGeometry(int x, int y, int w, int h)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qwidget.h:886
void raise()
Raises this widget to the top of the parent widget's stack.
QSize minimumSize
the widget's minimum size
Definition qwidget.h:120
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
virtual void paintEvent(QPaintEvent *event)
This event handler can be reimplemented in a subclass to receive paint events passed in event.
Definition qwidget.cpp:9829
QOpenGLWidget * widget
[1]
b clear()
double e
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:57
@ WA_SetCursor
Definition qnamespace.h:304
ToolBarArea
Orientation
Definition qnamespace.h:97
@ Horizontal
Definition qnamespace.h:98
@ SplitVCursor
@ SplitHCursor
DropAction
EGLStreamKHR stream
static int area(const QSize &s)
Definition qicon.cpp:152
#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
GLboolean GLuint group
GLint first
struct _cl_event * event
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
QFileInfo info(fileName)
[8]
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]
statusBar() -> addWidget(new MyReadWriteIndication)
[0]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent