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
qwhatsthis.cpp
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#include "qwhatsthis.h"
5#include "qpointer.h"
6#include "qapplication.h"
7#include <private/qguiapplication_p.h>
8#include "qwidget.h"
9#include "qevent.h"
10#include "qpixmap.h"
11#include "qscreen.h"
12#include "qpainter.h"
13#include "qtimer.h"
14#if QT_CONFIG(action)
15#include "qaction.h"
16#endif // QT_CONFIG(action)
17#include "qcursor.h"
18#include "qbitmap.h"
19#include "qtextdocument.h"
20#include <qpa/qplatformtheme.h>
21#include "private/qtextdocumentlayout_p.h"
22#include "qdebug.h"
23#if QT_CONFIG(accessibility)
24#include "qaccessible.h"
25#endif
26
28
100class QWhatsThat : public QWidget
101{
103
104public:
105 QWhatsThat(const QString& txt, QWidget* parent, QWidget *showTextFor);
106 ~QWhatsThat() ;
107
109
110protected:
111 void mousePressEvent(QMouseEvent*) override;
112 void mouseReleaseEvent(QMouseEvent*) override;
113 void mouseMoveEvent(QMouseEvent*) override;
114 void keyPressEvent(QKeyEvent*) override;
115 void paintEvent(QPaintEvent*) override;
116
117private:
118 QPointer<QWidget>widget;
119 bool pressed;
120 QString text;
121 QTextDocument* doc;
122 QString anchor;
123};
124
126
127// shadowWidth not const, for XP drop-shadow-fu turns it to 0
128static int shadowWidth = 6; // also used as '5' and '6' and even '8' below
129static const int vMargin = 8;
130static const int hMargin = 12;
131
132static inline bool dropShadow()
133{
135 return theme->themeHint(QPlatformTheme::DropShadow).toBool();
136 return false;
137}
138
139QWhatsThat::QWhatsThat(const QString& txt, QWidget* parent, QWidget *showTextFor)
140 : QWidget(parent, Qt::Popup),
141 widget(showTextFor), pressed(false), text(txt)
142{
143 delete instance;
144 instance = this;
147 if (parent)
148 setPalette(parent->palette());
149 setMouseTracking(true);
151#ifndef QT_NO_CURSOR
153#endif
154 QRect r;
155 doc = nullptr;
156 ensurePolished(); // Ensures style sheet font before size calc
157 if (Qt::mightBeRichText(text)) {
158 doc = new QTextDocument();
159 doc->setUndoRedoEnabled(false);
161#ifdef QT_NO_TEXTHTMLPARSER
162 doc->setPlainText(text);
163#else
164 doc->setHtml(text);
165#endif
166 doc->setUndoRedoEnabled(false);
167 doc->adjustSize();
168 r.setTop(0);
169 r.setLeft(0);
170 r.setSize(doc->size().toSize());
171 }
172 else
173 {
175 if (sw < 200)
176 sw = 200;
177 else if (sw > 300)
178 sw = 300;
179
180 r = fontMetrics().boundingRect(0, 0, sw, 1000,
183 text);
184 }
185 shadowWidth = dropShadow() ? 0 : 6;
186 resize(r.width() + 2*hMargin + shadowWidth, r.height() + 2*vMargin + shadowWidth);
187}
188
190{
191 instance = nullptr;
192 if (doc)
193 delete doc;
194}
195
197{
198 pressed = true;
199 if (e->button() == Qt::LeftButton && rect().contains(e->position().toPoint())) {
200 if (doc)
201 anchor = doc->documentLayout()->anchorAt(e->position().toPoint() - QPoint(hMargin, vMargin));
202 return;
203 }
204 close();
205}
206
208{
209 if (!pressed)
210 return;
211 if (widget && e->button() == Qt::LeftButton && doc && rect().contains(e->position().toPoint())) {
213 QString href;
214 if (anchor == a)
215 href = a;
216 anchor.clear();
217 if (!href.isEmpty()) {
218 QWhatsThisClickedEvent e(href);
219 if (QCoreApplication::sendEvent(widget, &e))
220 return;
221 }
222 }
223 close();
224}
225
227{
228#ifdef QT_NO_CURSOR
229 Q_UNUSED(e);
230#else
231 if (!doc)
232 return;
234 if (!a.isEmpty())
236 else
238#endif
239}
240
245
247{
248 const bool drawShadow = dropShadow();
249
250 QRect r = rect();
251 r.adjust(0, 0, -1, -1);
252 if (drawShadow)
253 r.adjust(0, 0, -shadowWidth, -shadowWidth);
254 QPainter p(this);
255 p.setPen(QPen(palette().toolTipText(), 0));
256 p.setBrush(palette().toolTipBase());
257 p.drawRect(r);
258 int w = r.width();
259 int h = r.height();
260 p.setPen(palette().brush(QPalette::Dark).color());
261 p.drawRect(1, 1, w-2, h-2);
262 if (drawShadow) {
263 p.setPen(palette().shadow().color());
264 p.drawPoint(w + 5, 6);
265 p.drawLine(w + 3, 6, w + 5, 8);
266 p.drawLine(w + 1, 6, w + 5, 10);
267 int i;
268 for(i=7; i < h; i += 2)
269 p.drawLine(w, i, w + 5, i + 5);
270 for(i = w - i + h; i > 6; i -= 2)
271 p.drawLine(i, h, i + 5, h + 5);
272 for(; i > 0 ; i -= 2)
273 p.drawLine(6, h + 6 - i, i + 5, h + 5);
274 }
275 r.adjust(0, 0, 1, 1);
276 p.setPen(palette().toolTipText().color());
277 r.adjust(hMargin, vMargin, -hMargin, -vMargin);
278
279 if (doc) {
280 p.translate(r.x(), r.y());
281 QRect rect = r;
282 rect.translate(-r.x(), -r.y());
283 p.setClipRect(rect);
285 context.palette.setBrush(QPalette::Text, context.palette.toolTipText());
286 doc->documentLayout()->draw(&p, context);
287 }
288 else
289 {
291 }
292}
293
294static const char * const button_image[] = {
295"16 16 3 1",
296" c None",
297"o c #000000",
298"a c #000080",
299"o aaaaa ",
300"oo aaa aaa ",
301"ooo aaa aaa",
302"oooo aa aa",
303"ooooo aa aa",
304"oooooo a aaa",
305"ooooooo aaa ",
306"oooooooo aaa ",
307"ooooooooo aaa ",
308"ooooo aaa ",
309"oo ooo ",
310"o ooo aaa ",
311" ooo aaa ",
312" ooo ",
313" ooo ",
314" ooo "};
315
317{
318 public:
322 bool eventFilter(QObject *, QEvent *) override;
323#if QT_CONFIG(action)
324 QPointer<QAction> action;
325#endif // QT_CONFIG(action)
326 static void say(QWidget *, const QString &, int x = 0, int y = 0);
327 static void notifyToplevels(QEvent *e);
329};
330
332{
333 const QWidgetList toplevels = QApplication::topLevelWidgets();
334 for (auto *w : toplevels)
336}
337
339
341 : leaveOnMouseRelease(false)
342{
343 instance = this;
344 qApp->installEventFilter(this);
345
348 QHelpEvent e(QEvent::QueryWhatsThis, w->mapFromGlobal(pos), pos);
349 const bool sentEvent = QCoreApplication::sendEvent(w, &e);
350#ifdef QT_NO_CURSOR
351 Q_UNUSED(sentEvent);
352#else
355 } else {
357#endif
358 }
359#if QT_CONFIG(accessibility)
360 QAccessibleEvent event(this, QAccessible::ContextHelpStart);
361 QAccessible::updateAccessibility(&event);
362#endif
363}
364
366{
367#if QT_CONFIG(action)
368 if (action)
369 action->setChecked(false);
370#endif // QT_CONFIG(action)
371#ifndef QT_NO_CURSOR
373#endif
374#if QT_CONFIG(accessibility)
375 QAccessibleEvent event(this, QAccessible::ContextHelpEnd);
376 QAccessible::updateAccessibility(&event);
377#endif
378 instance = nullptr;
379}
380
382{
383 if (!o->isWidgetType())
384 return false;
385 QWidget * w = static_cast<QWidget *>(o);
386 bool customWhatsThis = w->testAttribute(Qt::WA_CustomWhatsThis);
387 switch (e->type()) {
389 {
390 QMouseEvent *me = static_cast<QMouseEvent*>(e);
391 if (me->button() == Qt::RightButton || customWhatsThis)
392 return false;
394 if (!QCoreApplication::sendEvent(w, &e) || !e.isAccepted())
395 leaveOnMouseRelease = true;
396
397 } break;
398
400 {
401 QMouseEvent *me = static_cast<QMouseEvent*>(e);
403 const bool sentEvent = QCoreApplication::sendEvent(w, &e);
404#ifdef QT_NO_CURSOR
405 Q_UNUSED(sentEvent);
406#else
409#endif
411 }
416 if (static_cast<QMouseEvent*>(e)->button() == Qt::RightButton || customWhatsThis)
417 return false; // ignore RMB release
418 break;
419 case QEvent::KeyPress:
420 {
421 QKeyEvent *kev = static_cast<QKeyEvent *>(e);
422#if QT_CONFIG(shortcut)
423 if (kev->matches(QKeySequence::Cancel)) {
425 return true;
426 } else
427#endif
428 if (customWhatsThis) {
429 return false;
430 } else if (kev->key() == Qt::Key_Menu ||
431 (kev->key() == Qt::Key_F10 &&
432 kev->modifiers() == Qt::ShiftModifier)) {
433 // we don't react to these keys, they are used for context menus
434 return false;
435 } else if (kev->key() != Qt::Key_Shift && kev->key() != Qt::Key_Alt // not a modifier key
436 && kev->key() != Qt::Key_Control && kev->key() != Qt::Key_Meta) {
438 }
439 } break;
440 default:
441 return false;
442 }
443 return true;
444}
445
446#if QT_CONFIG(action)
447class QWhatsThisAction: public QAction
448{
450
451public:
452 explicit QWhatsThisAction(QObject* parent = nullptr);
453
454private slots:
455 void actionTriggered();
456};
457
458QWhatsThisAction::QWhatsThisAction(QObject *parent) : QAction(tr("What's This?"), parent)
459{
460#ifndef QT_NO_IMAGEFORMAT_XPM
462 setIcon(p);
463#endif
464 setCheckable(true);
465 connect(this, &QWhatsThisAction::triggered, this, &QWhatsThisAction::actionTriggered);
466#ifndef QT_NO_SHORTCUT
468#endif
469}
470
471void QWhatsThisAction::actionTriggered()
472{
473 if (isChecked()) {
475 QWhatsThisPrivate::instance->action = this;
476 }
477}
478#endif // QT_CONFIG(action)
479
499
507{
508 return (QWhatsThisPrivate::instance != nullptr);
509}
510
526
528{
529 if (text.size() == 0)
530 return;
531 // make a fresh widget, and set it up
532 QWhatsThat *whatsThat = new QWhatsThat(text, nullptr, widget);
533
534 // okay, now to find a suitable location
537 if (!screen)
539 QRect screenRect = screen->geometry();
540
541 int w = whatsThat->width();
542 int h = whatsThat->height();
543 int sx = screenRect.x();
544 int sy = screenRect.y();
545
546 // first try locating the widget immediately above/below,
547 // with nice alignment if possible.
548 QPoint pos;
549 if (widget)
550 pos = widget->mapToGlobal(QPoint(0,0));
551
552 if (widget && w > widget->width() + 16)
553 x = pos.x() + widget->width()/2 - w/2;
554 else
555 x = x - w/2;
556
557 // squeeze it in if that would result in part of what's this
558 // being only partially visible
559 if (x + w + shadowWidth > sx+screenRect.width()) {
560 x = (widget ? qMin(screenRect.width(), pos.x() + widget->width())
561 : screenRect.width())
562 - w;
563 }
564
565 if (x < sx)
566 x = sx;
567
568 if (widget && h > widget->height() + 16) {
569 y = pos.y() + widget->height() + 2; // below, two pixels spacing
570 // what's this is above or below, wherever there's most space
571 if (y + h + 10 > sy + screenRect.height())
572 y = pos.y() + 2 - shadowWidth - h; // above, overlap
573 }
574 y = y + 2;
575
576 // squeeze it in if that would result in part of what's this
577 // being only partially visible
578 if (y + h + shadowWidth > sy + screenRect.height()) {
579 y = (widget ? qMin(screenRect.height(), pos.y() + widget->height())
580 : screenRect.height())
581 - h;
582 }
583 if (y < sy)
584 y = sy;
585
586 whatsThat->move(x, y);
587 whatsThat->show();
588 whatsThat->grabKeyboard();
589}
590
599{
600 leaveWhatsThisMode();
601 QWhatsThisPrivate::say(w, text, pos.x(), pos.y());
602}
603
610{
612}
613
621#if QT_CONFIG(action)
622QAction *QWhatsThis::createAction(QObject *parent)
623{
624 return new QWhatsThisAction(parent);
625}
626#endif // QT_CONFIG(action)
627
629
630#include "qwhatsthis.moc"
QString anchorAt(const QPointF &pos) const
Returns the reference of the anchor the given position, or an empty string if no anchor exists at tha...
virtual void draw(QPainter *painter, const PaintContext &context)=0
Draws the layout with the given painter using the given context.
The QAction class provides an abstraction for user commands that can be added to different user inter...
Definition qaction.h:30
static QWidget * widgetAt(const QPoint &p)
Returns the widget at global screen position point, or \nullptr if there is no Qt widget there.
static QWidgetList topLevelWidgets()
Returns a list of the top-level widgets (windows) in the application.
static QFont font()
Returns the default application font.
static bool sendEvent(QObject *receiver, QEvent *event)
Sends event event directly to receiver receiver, using the notify() function.
static QPoint pos()
Returns the position of the cursor (hot spot) of the primary screen in global screen coordinates.
Definition qcursor.cpp:188
\inmodule QtCore
Definition qcoreevent.h:45
@ QueryWhatsThis
Definition qcoreevent.h:169
@ EnterWhatsThisMode
Definition qcoreevent.h:170
@ MouseMove
Definition qcoreevent.h:63
@ KeyPress
Definition qcoreevent.h:64
@ LeaveWhatsThisMode
Definition qcoreevent.h:171
@ MouseButtonPress
Definition qcoreevent.h:60
@ MouseButtonDblClick
Definition qcoreevent.h:62
@ WhatsThis
Definition qcoreevent.h:148
@ MouseButtonRelease
Definition qcoreevent.h:61
Type type() const
Returns the event type.
Definition qcoreevent.h:304
bool isAccepted() const
Definition qcoreevent.h:308
QRect boundingRect(QChar) const
Returns the rectangle that is covered by ink if character ch were to be drawn at the origin of the co...
static QPlatformTheme * platformTheme()
QScreen * primaryScreen
the primary (or default) screen of the application.
static void changeOverrideCursor(const QCursor &)
Changes the currently active application override cursor to cursor.
static void setOverrideCursor(const QCursor &)
Sets the application override cursor to cursor.
static void restoreOverrideCursor()
Undoes the last setOverrideCursor().
static QScreen * screenAt(const QPoint &point)
Returns the screen at point, or \nullptr if outside of any screen.
The QHelpEvent class provides an event that is used to request helpful information about a particular...
Definition qevent.h:788
The QKeyEvent class describes a key event.
Definition qevent.h:424
\inmodule QtGui
Definition qevent.h:196
\inmodule QtCore
Definition qobject.h:103
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
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
\inmodule QtGui
Definition qpen.h:28
Returns a copy of the pixmap that is transformed using the given transformation transform and transfo...
Definition qpixmap.h:27
The QPlatformTheme class allows customizing the UI based on themes.
constexpr qreal x() const noexcept
Returns the x coordinate of this point.
Definition qpoint.h:343
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
constexpr int height() const noexcept
Returns the height of the rectangle.
Definition qrect.h:239
constexpr int x() const noexcept
Returns the x-coordinate of the rectangle's left edge.
Definition qrect.h:185
constexpr void translate(int dx, int dy) noexcept
Moves the rectangle dx along the x axis and dy along the y axis, relative to the current position.
Definition qrect.h:245
constexpr int width() const noexcept
Returns the width of the rectangle.
Definition qrect.h:236
constexpr int y() const noexcept
Returns the y-coordinate of the rectangle's top edge.
Definition qrect.h:188
The QScreen class is used to query screen properties. \inmodule QtGui.
Definition qscreen.h:32
QRect geometry
the screen's geometry in pixels
Definition qscreen.h:45
QRect virtualGeometry
the pixel geometry of the virtual desktop to which this screen belongs
Definition qscreen.h:47
QPointF globalPosition() const
Returns the position of the point in this event on the screen or virtual desktop.
Definition qevent.h:123
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
constexpr QSize toSize() const noexcept
Returns an integer based copy of this size.
Definition qsize.h:401
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
Definition qstring.h:192
void clear()
Clears the contents of the string and makes it null.
Definition qstring.h:1252
qsizetype size() const noexcept
Returns the number of characters in this string.
Definition qstring.h:186
\reentrant \inmodule QtGui
void setHtml(const QString &html)
Replaces the entire contents of the document with the given HTML-formatted text in the html string.
QAbstractTextDocumentLayout * documentLayout() const
Returns the document layout for this document.
QSizeF size
the actual size of the document. This is equivalent to documentLayout()->documentSize();
void setDefaultFont(const QFont &font)
Sets the default font to use in the document layout.
void setUndoRedoEnabled(bool enable)
void setPlainText(const QString &text)
Replaces the entire contents of the document with the given plain text.
void keyPressEvent(QKeyEvent *) override
This event handler, for event event, can be reimplemented in a subclass to receive key press events f...
QWhatsThat(const QString &txt, QWidget *parent, QWidget *showTextFor)
void mouseReleaseEvent(QMouseEvent *) override
This event handler, for event event, can be reimplemented in a subclass to receive mouse release even...
void mouseMoveEvent(QMouseEvent *) override
This event handler, for event event, can be reimplemented in a subclass to receive mouse move events ...
void mousePressEvent(QMouseEvent *) override
This event handler, for event event, can be reimplemented in a subclass to receive mouse press events...
void paintEvent(QPaintEvent *) override
This event handler can be reimplemented in a subclass to receive paint events passed in event.
static QWhatsThat * instance
static void say(QWidget *, const QString &, int x=0, int y=0)
static QWhatsThisPrivate * instance
static void notifyToplevels(QEvent *e)
bool eventFilter(QObject *, QEvent *) override
Filters events if this object has been installed as an event filter for the watched object.
static void enterWhatsThisMode()
This function switches the user interface into "What's This?" mode.
static void leaveWhatsThisMode()
If the user interface is in "What's This?" mode, this function switches back to normal mode; otherwis...
static void showText(const QPoint &pos, const QString &text, QWidget *w=nullptr)
Shows text as a "What's This?" window, at global position pos.
static bool inWhatsThisMode()
Returns true if the user interface is in "What's This?" mode; otherwise returns false.
static void hideText()
If a "What's This?" window is showing, this destroys it.
The QWidget class is the base class of all user interface objects.
Definition qwidget.h:99
void setAttribute(Qt::WidgetAttribute, bool on=true)
Sets the attribute attribute on this widget if on is true; otherwise clears the attribute.
QPointF mapToGlobal(const QPointF &) const
Translates the widget coordinate pos to global screen coordinates.
void setPalette(const QPalette &)
Definition qwidget.cpp:4530
QPalette palette
the widget's palette
Definition qwidget.h:132
int width
the width of the widget excluding any window frame
Definition qwidget.h:114
void setMouseTracking(bool enable)
Definition qwidget.h:853
bool close()
Closes this widget.
Definition qwidget.cpp:8562
QFontMetrics fontMetrics() const
Returns the font metrics for the widget's current font.
Definition qwidget.h:847
void setFocusPolicy(Qt::FocusPolicy policy)
Definition qwidget.cpp:7822
int height
the height of the widget excluding any window frame
Definition qwidget.h:115
QRect rect
the internal geometry of the widget excluding any window frame
Definition qwidget.h:116
void ensurePolished() const
Ensures that the widget and its children have been polished by QStyle (i.e., have a proper font and p...
void resize(int w, int h)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qwidget.h:883
QScreen * screen() const
Returns the screen the widget is on.
Definition qwidget.cpp:2496
void setCursor(const QCursor &)
Definition qwidget.cpp:4960
bool testAttribute(Qt::WidgetAttribute) const
Returns true if attribute attribute is set on this widget; otherwise returns false.
Definition qwidget.h:910
QOpenGLWidget * widget
[1]
QString text
QPushButton * button
[2]
Combined button and popup list for selecting options.
Definition qcompare.h:63
@ AlignTop
Definition qnamespace.h:153
@ AlignLeft
Definition qnamespace.h:144
@ LeftButton
Definition qnamespace.h:58
@ RightButton
Definition qnamespace.h:59
@ WA_CustomWhatsThis
Definition qnamespace.h:313
@ WA_NoSystemBackground
Definition qnamespace.h:291
@ WA_DeleteOnClose
Definition qnamespace.h:321
@ StrongFocus
Definition qnamespace.h:110
@ TextWordWrap
Definition qnamespace.h:174
@ TextExpandTabs
Definition qnamespace.h:172
Q_GUI_EXPORT bool mightBeRichText(QAnyStringView)
Returns true if the string text is likely to be rich text; otherwise returns false.
@ PointingHandCursor
@ WhatsThisCursor
@ ArrowCursor
@ ForbiddenCursor
@ Key_Shift
Definition qnamespace.h:683
@ Key_Control
Definition qnamespace.h:684
@ Key_Alt
Definition qnamespace.h:686
@ Key_Meta
Definition qnamespace.h:685
@ Key_F1
Definition qnamespace.h:690
@ Key_Menu
Definition qnamespace.h:727
@ Key_F10
Definition qnamespace.h:699
@ ShiftModifier
Definition brush.cpp:5
static void * context
#define Q_FALLTHROUGH()
#define qApp
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
constexpr const T & qMin(const T &a, const T &b)
Definition qminmax.h:40
static bool contains(const QJsonArray &haystack, unsigned needle)
Definition qopengl.cpp:116
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLboolean r
[2]
GLuint color
[2]
GLint y
GLfloat GLfloat GLfloat GLfloat h
struct _cl_event * event
GLfloat GLfloat p
[1]
QScreen * screen
[1]
Definition main.cpp:29
#define tr(X)
#define Q_OBJECT
#define slots
#define Q_UNUSED(x)
static const int hMargin
static const char *const button_image[]
static bool dropShadow()
static int shadowWidth
static const int vMargin
Text files * txt
myAction setIcon(SomeIcon)
button setShortcut(tr("Alt+F7"))