[KLF Backend][KLF Tools][KLF Home]
KLatexFormula Project
klfguiutil.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * file klfguiutil.cpp
3  * This file is part of the KLatexFormula Project.
4  * Copyright (C) 2011 by Philippe Faist
5  * philippe.faist at bluewin.ch
6  * *
7  * This program is free software; you can redistribute it and/or modify *
8  * it under the terms of the GNU General Public License as published by *
9  * the Free Software Foundation; either version 2 of the License, or *
10  * (at your option) any later version. *
11  * *
12  * This program is distributed in the hope that it will be useful, *
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15  * GNU General Public License for more details. *
16  * *
17  * You should have received a copy of the GNU General Public License *
18  * along with this program; if not, write to the *
19  * Free Software Foundation, Inc., *
20  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
21  ***************************************************************************/
22 /* $Id: klfguiutil.cpp 963 2016-12-27 11:28:39Z phfaist $ */
23 
24 #include <cmath>
25 
26 #include <QApplication>
27 #include <QDesktopWidget>
28 #include <QIcon>
29 #include <QPushButton>
30 #include <QDebug>
31 
32 #include "klfutil.h"
33 #include "klfrelativefont.h"
34 #include "klfguiutil.h"
35 
36 
37 // ----------------------------------------------
38 
39 
41  : QObject(parent)
42 {
43  pMin = min;
44  pMax = max;
45  pFinished = false;
46 }
48 {
49  if (!pFinished) { // make sure finished() is emitted.
50  emit progress(pMax); // some connected clients just wait for maximum value progress
51  emit finished();
52  }
53 }
54 
56 {
57  if (pFinished) {
58  qWarning()<<KLF_FUNC_NAME<<": Operation is already finished!";
59  return;
60  }
61  emit progress(value);
62  if (value >= pMax) {
63  emit finished();
64  pFinished = true;
65  }
66 }
67 
68 
69 
70 // ---------------------------------------------------------
71 
72 
73 
75  : QProgressDialog(parent)
76 {
77  setup(false);
78  init(labelText);
79 }
80 KLFProgressDialog::KLFProgressDialog(bool canCancel, QString labelText, QWidget *parent)
81  : QProgressDialog(parent)
82 {
83  setup(canCancel);
84  init(labelText);
85 }
87 {
88 }
89 
90 void KLFProgressDialog::setup(bool canCancel)
91 {
92  pProgressReporter = NULL;
93  setAutoClose(true);
94  setAutoReset(true);
95  setModal(true);
96  // setWindowModality(Qt::ApplicationModal);
97  setWindowIcon(QIcon(":/pics/klatexformula-16.png"));
98  setWindowTitle(tr("Progress"));
99  QPushButton *cbtn = new QPushButton(tr("Cancel"), this);
100  setCancelButton(cbtn);
101  cbtn->setEnabled(canCancel);
102 }
103 void KLFProgressDialog::init(const QString& labelText)
104 {
105  setDescriptiveText(labelText);
106 }
107 
109 {
110  setLabelText(labelText);
111  setFixedSize((int)(sizeHint().width()*1.3), (int)(sizeHint().height()*1.1));
112 }
114  const QString& descriptiveText)
115 {
116  reset();
117  setDescriptiveText(descriptiveText);
118  setRange(progressReporter->min(), progressReporter->max());
119  setValue(0);
120 
121  // disconnect any previous progress reporter object
122  if (pProgressReporter != NULL)
123  disconnect(pProgressReporter, 0, this, SLOT(setValue(int)));
124  // and connect to this new one
125  connect(progressReporter, SIGNAL(progress(int)), this, SLOT(setValue(int)));
126 }
127 
129 {
130  reset();
131  setRange(progressReporter->min(), progressReporter->max());
132  setValue(0);
133  // disconnect any previous progress reporter object
134  if (pProgressReporter != NULL)
135  disconnect(pProgressReporter, 0, this, SLOT(setValue(int)));
136  // and connect to this new one
137  connect(progressReporter, SIGNAL(progress(int)), this, SLOT(setValue(int)));
138 }
139 
141 {
142  // KLF_DEBUG_BLOCK(KLF_FUNC_NAME);
143  klfDbg("value="<<value);
144  QProgressDialog::setValue(value);
145 }
146 
148 {
150  QProgressDialog::paintEvent(event);
151 }
152 
153 
154 // --------------------------
155 
156 
157 static Qt::WindowFlags klfpleasewait_flagsForSettings(bool alwaysAbove)
158 {
159  Qt::WindowFlags f = Qt::Window|Qt::SplashScreen|Qt::FramelessWindowHint;
160  if (alwaysAbove)
161  f |= Qt::WindowStaysOnTopHint|Qt::X11BypassWindowManagerHint;
162  return f;
163 }
164 
165 KLFPleaseWaitPopup::KLFPleaseWaitPopup(const QString& text, QWidget *parent, bool alwaysAbove)
166  : QLabel(text, ((parent!=NULL)?parent->window():NULL), klfpleasewait_flagsForSettings(alwaysAbove)),
167  pParentWidget(parent), pDisableUi(false), pGotPaintEvent(false), pDiscarded(false)
168 {
170  KLFRelativeFont *relfont = new KLFRelativeFont(this);
171  relfont->setRelPointSize(+2);
172 
173  setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
174  setWindowModality(Qt::ApplicationModal);
175  // let this window be styled by skins
176  setAttribute(Qt::WA_StyledBackground, true);
177  setProperty("klfTopLevelWidget", QVariant(true));
178 
179  setFrameStyle(QFrame::Panel|QFrame::Sunken);
180 
181  QWidget *pw = parentWidget(); // the one set in QLabel constructor, this is the top-level window
182  if (pw != NULL)
183  setStyleSheet(pw->window()->styleSheet());
184 
185  int w = qMax( (int)(sizeHint().width() *1.3) , 500 );
186  int h = qMax( (int)(sizeHint().height()*1.1) , 100 );
187  setFixedSize(w, h);
188  setWindowOpacity(0.94);
189 }
191 {
192  if (pDisableUi && pParentWidget != NULL)
193  pParentWidget->setEnabled(true);
194 }
195 
197 {
198  pDisableUi = disableUi;
199 }
200 
202 {
204 
205  QSize desktopSize;
206  QDesktopWidget *dw = QApplication::desktop();
207  if (dw != NULL) {
208  desktopSize = dw->screenGeometry(this).size();
209  } else {
210  desktopSize = QSize(1024, 768); // assume some default, worst case widget is more left and higher
211  }
212  move(desktopSize.width()/2 - width()/2, desktopSize.height()/2 - height()/2);
213  show();
214  setStyleSheet(styleSheet());
215 
216  if (pDisableUi && pParentWidget != NULL)
217  pParentWidget->setEnabled(false);
218 
219  while (!pGotPaintEvent)
220  qApp->processEvents();
221 }
222 
224 {
225  hide();
226  pDiscarded = true;
227 }
228 
230 {
231  pGotPaintEvent = true;
232  QLabel::paintEvent(event);
233 }
234 
235 
236 
237 // --------------------------
238 
239 
241  : KLFPleaseWaitPopup(text, callingWidget), pDelay(1000)
242 {
243  timer.start();
244 }
246 {
247 }
249 {
250  pDelay = ms;
251 }
253 {
254  if (!pleaseWaitShown() && timer.elapsed() > pDelay)
255  showPleaseWait();
256  qApp->processEvents();
257 }
258 
259 
260 
261 // ------------------------------------------------
262 
263 
265  : QComboBox(parent)
266 {
268  connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(internalCurrentIndexChanged(int)));
269 }
270 
271 KLFEnumComboBox::KLFEnumComboBox(const QList<int>& enumValues, const QStringList& enumTitles,
272  QWidget *parent)
273  : QComboBox(parent)
274 {
275  setEnumValues(enumValues, enumTitles);
276  connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(internalCurrentIndexChanged(int)));
277 }
278 
280 {
281 }
282 
283 void KLFEnumComboBox::setEnumValues(const QList<int>& enumValues, const QStringList& enumTitles)
284 {
286  klfDbg("enumValues="<<enumValues<<"; enumTitles="<<enumTitles);
287  blockSignals(true);
288  int savedCurrentIndex = currentIndex();
289  if (enumValues.size() != enumTitles.size()) {
290  qWarning()<<KLF_FUNC_NAME<<": enum value list and enum title list do not match!";
291  return;
292  }
293  pEnumValueList = enumValues;
294  clear();
295  int k;
296  for (k = 0; k < enumValues.size(); ++k) {
297  pEnumValues[enumValues[k]] = enumTitles[k];
298  insertItem(k, enumTitles[k], QVariant(enumValues[k]));
299  pEnumCbxIndexes[enumValues[k]] = k;
300  }
301  if (savedCurrentIndex >= 0 && savedCurrentIndex < count())
302  setCurrentIndex(savedCurrentIndex);
303  blockSignals(false);
304 }
305 
307 {
308  return itemData(currentIndex()).toInt();
309 }
310 
311 QString KLFEnumComboBox::enumText(int enumValue) const
312 {
313  if (!pEnumValueList.contains(enumValue)) {
314  qWarning()<<KLF_FUNC_NAME<<": "<<enumValue<<" is not a registered valid enum value!";
315  return QString();
316  }
317  return pEnumValues[enumValue];
318 }
319 
321 {
322  if (!pEnumCbxIndexes.contains(val)) {
323  qWarning()<<KLF_FUNC_NAME<<": "<<val<<" is not a registered valid enum value!";
324  return;
325  }
326  setCurrentIndex(pEnumCbxIndexes[val]);
327 }
328 
329 void KLFEnumComboBox::internalCurrentIndexChanged(int index)
330 {
331  emit selectedValueChanged(itemData(index).toInt());
332 }
333 
334 
335 // ------------------------
336 
337 
339  : QLabel(parent)
340 {
341  pAnimMovie = NULL;
342  /*
343  pAnimMovie = new QMovie(":/pics/wait_anim.mng", "MNG", this);
344  pAnimMovie->setCacheMode(QMovie::CacheAll);
345  */
346 
347  setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
348 
349  hide();
350 
351  pAnimTimerId = -1;
352  pIsWaiting = false;
353 
354  // default values
355  pWidthPercent = 30;
356  pHeightPercent = 70;
357  pPositionXPercent = 50;
358  pPositionYPercent = 50;
359 
360  setBackgroundColor(QColor(255,255,255,128));
361 }
362 
364 {
365 }
366 
368 {
369  return palette().color(QPalette::Window);
370 }
371 
373 {
374  if (pAnimMovie != NULL) {
375  delete pAnimMovie;
376  }
377  pAnimMovie = movie;
378  pAnimMovie->setParent(this);
379 }
380 
382 {
383  QMovie *m = new QMovie(filename);
384  m->setCacheMode(QMovie::CacheAll);
385  setWaitMovie(m);
386 }
387 
388 
390 {
391  setStyleSheet(QString("background-color: rgba(%1,%2,%3,%4)")
392  .arg(c.red()).arg(c.green()).arg(c.blue()).arg(c.alpha()));
393 }
394 
395 
397 {
398  if (pIsWaiting)
399  return;
400 
401  pIsWaiting = true;
402  if (pAnimMovie == NULL)
403  return;
404 
405  pAnimMovie->jumpToFrame(0);
406  setPixmap(pAnimMovie->currentPixmap());
407  setGeometry(calcAnimationLabelGeometry());
408  show();
409  update();
410 
411  qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
412 
413  pAnimTimerId = startTimer(pAnimMovie->nextFrameDelay());
414 }
415 
417 {
418  if (!pIsWaiting)
419  return;
420 
421  hide();
422 
423  if (pAnimTimerId >= 0)
424  killTimer(pAnimTimerId);
425  pAnimTimerId = -1;
426  pIsWaiting = false;
427 }
428 
430 {
431  if (event->timerId() == pAnimTimerId) {
432  pAnimMovie->jumpToNextFrame();
433  setPixmap(pAnimMovie->currentPixmap());
434  repaint();
435  return;
436  }
437 }
438 
440 {
441  QWidget * w = parentWidget();
442  if (w == NULL) {
443  qWarning()<<KLF_FUNC_NAME<<": this animation label MUST be used with a parent!";
444  return QRect();
445  }
446  QRect g = w->geometry();
447  QSize sz = QSize(w->width()*pWidthPercent/100,w->height()*pHeightPercent/100);
448 
449  klfDbg("parent geometry: "<<g<<"; our size="<<sz) ;
450 
451  return KLF_DEBUG_TEE( QRect(QPoint( (g.width()-sz.width())*pPositionXPercent/100,
452  (g.height()-sz.height())*pPositionYPercent/100),
453  sz) );
454 }
455 
456 
457 
458 // -----------------------
459 
460 
461 KLF_EXPORT void klfDrawGlowedImage(QPainter *p, const QImage& foreground, const QColor& glowcol,
462  int r, bool also_draw_image)
463 {
465 
466  QImage fg = foreground;
467  if (fg.format() != QImage::Format_ARGB32_Premultiplied &&
468  fg.format() != QImage::Format_ARGB32)
469  fg = fg.convertToFormat(QImage::Format_ARGB32);
470 
471  QRgb glow_color = glowcol.rgba();
472 
473  qreal dpr = p->device()->devicePixelRatioF();
474  QSize userspace_size = fg.size() / dpr;
475 
476  int r2 = r*dpr;
477 
478  QImage glow(fg.size(), QImage::Format_ARGB32_Premultiplied);
479  int x, y;
480  qreal ga = qAlpha(glow_color) / qreal(255);
481  ga /= r*r; // heuristic scaling of alpha
482  for (x = 0; x < fg.width(); ++x) {
483  for (y = 0; y < fg.height(); ++y) {
484  qreal ai = qAlpha(fg.pixel(x,y)) * ga;
485  qreal a = ai / 255;
486  // glow format is argb32_premultiplied
487  glow.setPixel(x,y, qRgba(qRed(glow_color)*a, qGreen(glow_color)*a, qBlue(glow_color)*a, ai));
488  }
489  }
490  // now draw that glowed image a few times moving around the interest point to do a glow effect
491  // p->save();
492  // p->setOpacity(std::log(-numoverlaps));
493  // p->setCompositionMode(QPainter::CompositionMode_Plus);
494  int dx, dy;
495  for (dx = -r2; dx <= r2; dx += dpr) {
496  for (dy = -r2; dy <= r2; dy += dpr) {
497  if (dx*dx+dy*dy > r2*r2) // don't go beyond r2 device pixels from (0,0)
498  continue;
499  p->drawImage(QRectF(QPointF(dx/dpr,dy/dpr), userspace_size), glow);
500  }
501  }
502  // p->restore();
503  if (also_draw_image) {
504  p->drawImage(QRect(QPoint(0,0), userspace_size), fg);
505  }
506 }
507 
508 
509 
510 // --------------------------
511 
512 QImage klfImageScaled(const QImage& source, const QSize& newSize)
513 {
514  QImage img = source.scaled(newSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
515  // set text attributes
516  QStringList keys = source.textKeys();
517  int k;
518  for (k = 0; k < keys.size(); ++k) {
519  img.setText(keys[k], source.text(keys[k]));
520  }
521  return img;
522 }
523 
524 
525 // --------------------
526 
528 {
529 #if defined(KLF_WS_X11)
530  QRect g = w->frameGeometry();
531 #else
532  QRect g = w->geometry();
533 #endif
534  return g;
535 }
536 
538 {
539  if ( ! g.isValid() )
540  return;
541 
542  w->setGeometry(g);
543 }
544 
545 
547  : QObject(window), pWindow(window)
548 {
549  window->installEventFilter(this);
550 }
551 
553 {
554 }
555 
557 {
558  if (obj == pWindow) {
559  if (event->type() == QEvent::Hide) {
560  // save geometry
561  pWindow->setProperty("klf_saved_geometry", klf_get_window_geometry(pWindow));
562  } else if (event->type() == QEvent::Show) {
563  QVariant val;
564  if ((val = pWindow->property("klf_saved_geometry")).isValid())
565  klf_set_window_geometry(pWindow, val.value<QRect>());
566  }
567  }
568 
569  return false;
570 }
571 
572 
573 
578 static QHash<QWidget*,bool> windowShownStates;
579 
580 /*
581 inline bool has_ancestor_of_type(QObject *testobj, const char * type)
582 {
583  klfDbg("testing if "<<testobj<<" is (grand-)child of object inheriting "<<type) ;
584  if (testobj == NULL)
585  return false;
586  do {
587  if (testobj->inherits(type)) {
588  klfDbg("inherits "<<type<<"!") ;
589  return true;
590  }
591  } while ((testobj = testobj->parent()) != NULL) ;
592  klfDbg("no.") ;
593  return false;
594 }
595 */
596 
598 {
600  // / ** \todo don't _FORCE_ this setting, remember and restore it.... * /
601  // qApp->setQuitOnLastWindowClosed(false);
602 
603  // save the window states, while checking that not all the windows are already hidden
604  QHash<QWidget*,bool> states;
605  bool allalreadyhidden = true;
606  QWidgetList wlist = QApplication::topLevelWidgets();
607  foreach (QWidget *w, wlist) {
608  // if (w->inherits("QMenu"))
609  // continue;
610  uint wflags = w->windowFlags();
611  klfDbg("next widget in line: "<<w<<", wflags="<<wflags) ;
612  if ((wflags & Qt::Window) == 0) {
613  continue;
614  }
615  if (wflags & Qt::X11BypassWindowManagerHint) {
619  continue;
620  }
621  klfDbg("dealing with widget "<<w) ;
622  bool shown = w->isVisible();
623  states[w] = shown;
624  if (shown) {
625  klfDbg("hiding window "<<w<<", wflags="<<w->windowFlags()) ;
626  w->hide();
627  allalreadyhidden = false;
628  }
629  }
630  if (!allalreadyhidden) {
631  // don't overwrite the saved status list with an all-hidden state list
632  windowShownStates = states;
633  }
634 }
635 
637 {
639  QWidgetList wlist = QApplication::topLevelWidgets();
640  foreach (QWidget *w, wlist) {
641  if (!windowShownStates.contains(w))
642  continue;
643  // restore this window
644  if (!w->isVisible()) {
645  klfDbg("Restoring window "<<w) ;
646  w->setVisible(windowShownStates[w]);
647  }
648  }
649 }
QImage convertToFormat(Format format, Qt::ImageConversionFlags flags) const
virtual void setDisableUi(bool disableUi)
Definition: klfguiutil.cpp:196
virtual void mousePressEvent(QMouseEvent *event)
Definition: klfguiutil.cpp:223
Type type() const
virtual ~KLFWaitAnimationOverlay()
Definition: klfguiutil.cpp:363
int width() const
QImage klfImageScaled(const QImage &source, const QSize &newSize)
Scale image, preserve aspect ratio and meta-information.
Definition: klfguiutil.cpp:512
bool contains(const Key &key) const
QPixmap currentPixmap() const
virtual ~KLFProgressDialog()
Definition: klfguiutil.cpp:86
bool jumpToNextFrame()
#define KLF_DEBUG_TEE(expr)
Print the value of expression and return it.
KLF_EXPORT void klfHideWindows()
Definition: klfguiutil.cpp:597
virtual void timerEvent(QTimerEvent *event)
Definition: klfguiutil.cpp:429
void doReportProgress(int value)
Definition: klfguiutil.cpp:55
#define klfDbg(streamableItems)
print debug stream items
virtual void setDelay(int ms)
Definition: klfguiutil.cpp:248
T value() const
#define KLF_DEBUG_BLOCK(msg)
Utility to debug the execution of a block.
int height() const
QString text(const QString &key) const
KLFEnumComboBox(QWidget *parent=0)
Definition: klfguiutil.cpp:264
QStringList textKeys() const
int size() const
KLFWaitAnimationOverlay(QWidget *parent)
Definition: klfguiutil.cpp:338
virtual void setValue(int value)
Definition: klfguiutil.cpp:140
virtual bool event(QEvent *e)
void selectedValueChanged(int enumValue)
void setText(const QString &key, const QString &text)
void setBackgroundColor(const QColor &c)
Set the label background color.
Definition: klfguiutil.cpp:389
QRgb pixel(int x, int y) const
int elapsed() const
A popup screen inviting the user to wait.
Definition: klfguiutil.h:237
void installEventFilter(QObject *filterObj)
#define KLF_EXPORT
Definition: klfdefs.h:41
KLF_EXPORT void klf_set_window_geometry(QWidget *w, QRect g)
Definition: klfguiutil.cpp:537
int red() const
int width() const
void progress(int progressValue)
int max() const
Definition: klfguiutil.h:72
virtual bool pleaseWaitShown() const
Definition: klfguiutil.h:272
int min() const
Definition: klfguiutil.h:71
void paintEvent(QPaintEvent *event)
Definition: klfguiutil.cpp:147
void setEnumValues(const QList< int > &enumValues, const QStringList &enumTitles)
Definition: klfguiutil.cpp:283
QPaintDevice * device() const
Object that emits progress information of a (lengthy) operation.
Definition: klfguiutil.h:63
qreal devicePixelRatioF() const
KLFWindowGeometryRestorer(QWidget *window)
Definition: klfguiutil.cpp:546
int alpha() const
virtual void startReportingProgress(KLFProgressReporter *progressReporter, const QString &descriptiveText)
Definition: klfguiutil.cpp:113
virtual ~KLFWindowGeometryRestorer()
Definition: klfguiutil.cpp:552
int green() const
virtual void startWait()
Display the animation.
Definition: klfguiutil.cpp:396
virtual ~KLFPleaseWaitPopup()
Definition: klfguiutil.cpp:190
#define KLF_FUNC_NAME
void setParent(QObject *parent)
void setCacheMode(CacheMode mode)
bool contains(const T &value) const
bool isValid() const
bool jumpToFrame(int frameNumber)
virtual void stopWait()
Hide the animation.
Definition: klfguiutil.cpp:416
int blue() const
int width() const
void drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags)
KLF_EXPORT void klfRestoreWindows()
Definition: klfguiutil.cpp:636
QString enumText(int enumValue) const
Definition: klfguiutil.cpp:311
virtual ~KLFDelayedPleaseWaitPopup()
Definition: klfguiutil.cpp:245
KLFPleaseWaitPopup(const QString &text, QWidget *callingWidget=NULL, bool alwaysAbove=false)
Definition: klfguiutil.cpp:165
int height() const
virtual ~KLFProgressReporter()
Definition: klfguiutil.cpp:47
QSize size() const
int timerId() const
KLF_EXPORT void klfDrawGlowedImage(QPainter *p, const QImage &foreground, const QColor &glowcol, int r, bool also_draw_image)
Draws the given image with a glow effect.
Definition: klfguiutil.cpp:461
int selectedValue() const
void setRelPointSize(int relps)
int nextFrameDelay() const
void start()
int height() const
virtual ~KLFEnumComboBox()
Definition: klfguiutil.cpp:279
bool contains(const Key &key) const
KLF_EXPORT QRect klf_get_window_geometry(QWidget *w)
Definition: klfguiutil.cpp:527
virtual QRect calcAnimationLabelGeometry()
Definition: klfguiutil.cpp:439
virtual bool eventFilter(QObject *obj, QEvent *event)
Definition: klfguiutil.cpp:556
virtual void setDescriptiveText(const QString &labelText)
Definition: klfguiutil.cpp:108
virtual void showPleaseWait()
Definition: klfguiutil.cpp:201
void setSelectedValue(int val)
Definition: klfguiutil.cpp:320
virtual void paintEvent(QPaintEvent *event)
Definition: klfguiutil.cpp:229
QObject * parent() const
KLFProgressReporter(int min, int max, QObject *parent=NULL)
Definition: klfguiutil.cpp:40
virtual void setWaitMovie(QMovie *movie)
Set which animation to display while searching.
Definition: klfguiutil.cpp:372
Format format() const
typedef WindowFlags
KLFProgressDialog(QString labelText=QString(), QWidget *parent=NULL)
Definition: klfguiutil.cpp:74
QImage scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode, Qt::TransformationMode transformMode) const
KLFDelayedPleaseWaitPopup(const QString &text, QWidget *callingWidget=NULL)
Definition: klfguiutil.cpp:240
QRgb rgba() const
QColor backgroundColor() const

Generated by doxygen 1.8.13