• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KDEUI

  • kdeui
  • dialogs
kconfigdialogmanager.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the KDE libraries
3 * Copyright (C) 2003 Benjamin C Meyer (ben+kdelibs at meyerhome dot net)
4 * Copyright (C) 2003 Waldo Bastian <bastian@kde.org>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General Public License
17 * along with this library; see the file COPYING.LIB. If not, write to
18 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 */
21
22#include "kconfigdialogmanager.h"
23
24#include <QComboBox>
25#include <QGroupBox>
26#include <QLabel>
27#include <QMetaObject>
28#include <QMetaProperty>
29#include <QTimer>
30#include <QRadioButton>
31//#include <QButtonGroup>
32
33#include <kconfigskeleton.h>
34#include <kdebug.h>
35#include <kglobal.h>
36
37#include <assert.h>
38
39typedef QHash<QString, QByteArray> MyHash;
40K_GLOBAL_STATIC(MyHash, s_propertyMap)
41K_GLOBAL_STATIC(MyHash, s_changedMap)
42
43class KConfigDialogManager::Private {
44
45public:
46 Private(KConfigDialogManager *q) : q(q), insideGroupBox(false) { }
47
48public:
49 KConfigDialogManager *q;
50
51 static int debugArea() { static int s_area = KDebug::registerArea("kdeui (KConfigDialogManager)"); return s_area; }
52
56 KCoreConfigSkeleton *m_conf;
57
61 QWidget *m_dialog;
62
63 QHash<QString, QWidget *> knownWidget;
64 QHash<QString, QWidget *> buddyWidget;
65 bool insideGroupBox : 1;
66 bool trackChanges : 1;
67};
68
69KConfigDialogManager::KConfigDialogManager(QWidget *parent, KCoreConfigSkeleton *conf)
70 : QObject(parent), d(new Private(this))
71{
72 d->m_conf = conf;
73 d->m_dialog = parent;
74 init(true);
75}
76
77KConfigDialogManager::KConfigDialogManager(QWidget *parent, KConfigSkeleton *conf)
78 : QObject(parent), d(new Private(this))
79{
80 d->m_conf = conf;
81 d->m_dialog = parent;
82 init(true);
83}
84
85KConfigDialogManager::~KConfigDialogManager()
86{
87 delete d;
88}
89
90void KConfigDialogManager::initMaps()
91{
92 if ( s_propertyMap->isEmpty() ) {
93 s_propertyMap->insert( "KButtonGroup", "current" );
94 s_propertyMap->insert( "KColorButton", "color" );
95 s_propertyMap->insert( "KColorCombo", "color" );
96 //s_propertyMap->insert( "KUrlRequester", "url" );
97 //s_propertyMap->insert( "KUrlComboRequester", "url" );
98 }
99
100 if( s_changedMap->isEmpty() )
101 {
102 // QT
103 s_changedMap->insert("QCheckBox", SIGNAL(stateChanged(int)));
104 s_changedMap->insert("QPushButton", SIGNAL(clicked(bool)));
105 s_changedMap->insert("QRadioButton", SIGNAL(toggled(bool)));
106 // We can only store one thing, so you can't have
107 // a ButtonGroup that is checkable.
108// s_changedMap->insert("QButtonGroup", SIGNAL(buttonClicked(int)));
109 s_changedMap->insert("QGroupBox", SIGNAL(toggled(bool)));
110 s_changedMap->insert("QComboBox", SIGNAL(activated(int)));
111 //qsqlproperty map doesn't store the text, but the value!
112 //s_changedMap->insert("QComboBox", SIGNAL(textChanged(QString)));
113 s_changedMap->insert("QDateEdit", SIGNAL(dateChanged(QDate)));
114 s_changedMap->insert("QTimeEdit", SIGNAL(timeChanged(QTime)));
115 s_changedMap->insert("QDateTimeEdit", SIGNAL(dateTimeChanged(QDateTime)));
116 s_changedMap->insert("QDial", SIGNAL(valueChanged(int)));
117 s_changedMap->insert("QDoubleSpinBox", SIGNAL(valueChanged(double)));
118 s_changedMap->insert("QLineEdit", SIGNAL(textChanged(QString)));
119 s_changedMap->insert("QSlider", SIGNAL(valueChanged(int)));
120 s_changedMap->insert("QSpinBox", SIGNAL(valueChanged(int)));
121 s_changedMap->insert("QTextEdit", SIGNAL(textChanged()));
122 s_changedMap->insert("QTextBrowser", SIGNAL(sourceChanged(QString)));
123 s_changedMap->insert("QPlainTextEdit", SIGNAL(textChanged()));
124 s_changedMap->insert("QTabWidget", SIGNAL(currentChanged(int)));
125
126 // KDE
127 s_changedMap->insert( "KComboBox", SIGNAL(activated(int)));
128 s_changedMap->insert( "KFontComboBox", SIGNAL(activated(int)));
129 s_changedMap->insert( "KFontRequester", SIGNAL(fontSelected(QFont)));
130 s_changedMap->insert( "KFontChooser", SIGNAL(fontSelected(QFont)));
131 s_changedMap->insert( "KHistoryCombo", SIGNAL(activated(int)));
132 s_changedMap->insert( "KColorCombo", SIGNAL(activated(QColor)));
133
134 s_changedMap->insert( "KColorButton", SIGNAL(changed(QColor)));
135 s_changedMap->insert( "KDatePicker", SIGNAL(dateSelected(QDate)));
136 s_changedMap->insert( "KDateWidget", SIGNAL(changed(QDate)));
137 s_changedMap->insert( "KDateTimeWidget", SIGNAL(valueChanged(QDateTime)));
138 s_changedMap->insert( "KEditListBox", SIGNAL(changed()));
139 s_changedMap->insert( "KEditListWidget", SIGNAL(changed()));
140 s_changedMap->insert( "KListWidget", SIGNAL(itemSelectionChanged()));
141 s_changedMap->insert( "KLineEdit", SIGNAL(textChanged(QString)));
142 s_changedMap->insert( "KPasswordEdit", SIGNAL(textChanged(QString)));
143 s_changedMap->insert( "KRestrictedLine", SIGNAL(textChanged(QString)));
144 s_changedMap->insert( "KTextBrowser", SIGNAL(sourceChanged(QString)));
145 s_changedMap->insert( "KTextEdit", SIGNAL(textChanged()));
146 s_changedMap->insert( "KUrlRequester", SIGNAL(textChanged(QString)));
147 s_changedMap->insert( "KUrlComboRequester", SIGNAL(textChanged(QString)));
148 s_changedMap->insert( "KUrlComboBox", SIGNAL(urlActivated(KUrl)));
149 s_changedMap->insert( "KIntNumInput", SIGNAL(valueChanged(int)));
150 s_changedMap->insert( "KIntSpinBox", SIGNAL(valueChanged(int)));
151 s_changedMap->insert( "KDoubleNumInput", SIGNAL(valueChanged(double)));
152 s_changedMap->insert( "KButtonGroup", SIGNAL(changed(int)));
153 }
154}
155
156QHash<QString, QByteArray> *KConfigDialogManager::propertyMap()
157{
158 initMaps();
159 return s_propertyMap;
160}
161
162QHash<QString, QByteArray> *KConfigDialogManager::changedMap()
163{
164 initMaps();
165 return s_changedMap;
166}
167
168void KConfigDialogManager::init(bool trackChanges)
169{
170 initMaps();
171 d->trackChanges = trackChanges;
172
173 // Go through all of the children of the widgets and find all known widgets
174 (void) parseChildren(d->m_dialog, trackChanges);
175}
176
177void KConfigDialogManager::addWidget(QWidget *widget)
178{
179 (void) parseChildren(widget, true);
180}
181
182void KConfigDialogManager::setupWidget(QWidget *widget, KConfigSkeletonItem *item)
183{
184 QVariant minValue = item->minValue();
185 if (minValue.isValid())
186 {
187 // Only q3datetimeedit is using this property we can remove it if we stop supporting Qt3Support
188 if (widget->metaObject()->indexOfProperty("minValue") != -1)
189 widget->setProperty("minValue", minValue);
190 if (widget->metaObject()->indexOfProperty("minimum") != -1)
191 widget->setProperty("minimum", minValue);
192 }
193 QVariant maxValue = item->maxValue();
194 if (maxValue.isValid())
195 {
196 // Only q3datetimeedit is using that property we can remove it if we stop supporting Qt3Support
197 if (widget->metaObject()->indexOfProperty("maxValue") != -1)
198 widget->setProperty("maxValue", maxValue);
199 if (widget->metaObject()->indexOfProperty("maximum") != -1)
200 widget->setProperty("maximum", maxValue);
201 }
202
203 if (widget->whatsThis().isEmpty())
204 {
205 QString whatsThis = item->whatsThis();
206 if ( !whatsThis.isEmpty() )
207 {
208 widget->setWhatsThis(whatsThis );
209 }
210 }
211
212 if (widget->toolTip().isEmpty())
213 {
214 QString toolTip = item->toolTip();
215 if ( !toolTip.isEmpty() )
216 {
217 widget->setToolTip(toolTip);
218 }
219 }
220
221 if(!item->isEqual( property(widget) ))
222 setProperty( widget, item->property() );
223}
224
225bool KConfigDialogManager::parseChildren(const QWidget *widget, bool trackChanges)
226{
227 bool valueChanged = false;
228 const QList<QObject*> listOfChildren = widget->children();
229 if(listOfChildren.count()==0) //?? XXX
230 return valueChanged;
231
232 foreach ( QObject *object, listOfChildren )
233 {
234 if(!object->isWidgetType())
235 continue; // Skip non-widgets
236
237 QWidget *childWidget = static_cast<QWidget *>(object);
238
239 QString widgetName = childWidget->objectName();
240 bool bParseChildren = true;
241 bool bSaveInsideGroupBox = d->insideGroupBox;
242
243 if (widgetName.startsWith(QLatin1String("kcfg_")))
244 {
245 // This is one of our widgets!
246 QString configId = widgetName.mid(5);
247 KConfigSkeletonItem *item = d->m_conf->findItem(configId);
248 if (item)
249 {
250 d->knownWidget.insert(configId, childWidget);
251
252 setupWidget(childWidget, item);
253
254 if ( d->trackChanges ) {
255 QHash<QString, QByteArray>::const_iterator changedIt = s_changedMap->constFind(childWidget->metaObject()->className());
256
257 if (changedIt == s_changedMap->constEnd())
258 {
259 // If the class name of the widget wasn't in the monitored widgets map, then look for
260 // it again using the super class name. This fixes a problem with using QtRuby/Korundum
261 // widgets with KConfigXT where 'Qt::Widget' wasn't being seen a the real deal, even
262 // though it was a 'QWidget'.
263 if ( childWidget->metaObject()->superClass() )
264 changedIt = s_changedMap->constFind(childWidget->metaObject()->superClass()->className());
265 else
266 changedIt = s_changedMap->constFind(0);
267 }
268
269 if (changedIt == s_changedMap->constEnd())
270 {
271 kWarning(d->debugArea()) << "Don't know how to monitor widget '" << childWidget->metaObject()->className() << "' for changes!";
272 }
273 else
274 {
275 connect(childWidget, *changedIt,
276 this, SIGNAL(widgetModified()));
277
278 QComboBox *cb = qobject_cast<QComboBox *>(childWidget);
279 if (cb && cb->isEditable())
280 connect(cb, SIGNAL(editTextChanged(QString)),
281 this, SIGNAL(widgetModified()));
282 }
283 }
284 QGroupBox *gb = qobject_cast<QGroupBox *>(childWidget);
285 if (!gb)
286 bParseChildren = false;
287 else
288 d->insideGroupBox = true;
289 }
290 else
291 {
292 kWarning(d->debugArea()) << "A widget named '" << widgetName << "' was found but there is no setting named '" << configId << "'";
293 }
294 }
295 else if (QLabel *label = qobject_cast<QLabel*>(childWidget))
296 {
297 QWidget *buddy = label->buddy();
298 if (!buddy)
299 continue;
300 QString buddyName = buddy->objectName();
301 if (buddyName.startsWith(QLatin1String("kcfg_")))
302 {
303 // This is one of our widgets!
304 QString configId = buddyName.mid(5);
305 d->buddyWidget.insert(configId, childWidget);
306 }
307 }
308#ifndef NDEBUG
309 else if (!widgetName.isEmpty() && d->trackChanges)
310 {
311 QHash<QString, QByteArray>::const_iterator changedIt = s_changedMap->constFind(childWidget->metaObject()->className());
312 if (changedIt != s_changedMap->constEnd())
313 {
314 if ((!d->insideGroupBox || !qobject_cast<QRadioButton*>(childWidget)) &&
315 !qobject_cast<QGroupBox*>(childWidget) &&!qobject_cast<QTabWidget*>(childWidget) )
316 kDebug(d->debugArea()) << "Widget '" << widgetName << "' (" << childWidget->metaObject()->className() << ") remains unmanaged.";
317 }
318 }
319#endif
320
321 if(bParseChildren)
322 {
323 // this widget is not known as something we can store.
324 // Maybe we can store one of its children.
325 valueChanged |= parseChildren(childWidget, trackChanges);
326 }
327 d->insideGroupBox = bSaveInsideGroupBox;
328 }
329 return valueChanged;
330}
331
332void KConfigDialogManager::updateWidgets()
333{
334 bool changed = false;
335 bool bSignalsBlocked = signalsBlocked();
336 blockSignals(true);
337
338 QWidget *widget;
339 QHashIterator<QString, QWidget *> it( d->knownWidget );
340 while(it.hasNext()) {
341 it.next();
342 widget = it.value();
343
344 KConfigSkeletonItem *item = d->m_conf->findItem(it.key());
345 if (!item)
346 {
347 kWarning(d->debugArea()) << "The setting '" << it.key() << "' has disappeared!";
348 continue;
349 }
350
351 if(!item->isEqual( property(widget) ))
352 {
353 setProperty( widget, item->property() );
354// kDebug(d->debugArea()) << "The setting '" << it.key() << "' [" << widget->className() << "] has changed";
355 changed = true;
356 }
357 if (item->isImmutable())
358 {
359 widget->setEnabled(false);
360 QWidget *buddy = d->buddyWidget.value(it.key(), 0);
361 if (buddy)
362 buddy->setEnabled(false);
363 }
364 }
365 blockSignals(bSignalsBlocked);
366
367 if (changed)
368 QTimer::singleShot(0, this, SIGNAL(widgetModified()));
369}
370
371void KConfigDialogManager::updateWidgetsDefault()
372{
373 bool bUseDefaults = d->m_conf->useDefaults(true);
374 updateWidgets();
375 d->m_conf->useDefaults(bUseDefaults);
376}
377
378void KConfigDialogManager::updateSettings()
379{
380 bool changed = false;
381
382 QWidget *widget;
383 QHashIterator<QString, QWidget *> it( d->knownWidget );
384 while(it.hasNext()) {
385 it.next();
386 widget = it.value();
387
388 KConfigSkeletonItem *item = d->m_conf->findItem(it.key());
389 if (!item) {
390 kWarning(d->debugArea()) << "The setting '" << it.key() << "' has disappeared!";
391 continue;
392 }
393
394 QVariant fromWidget = property(widget);
395 if(!item->isEqual( fromWidget )) {
396 item->setProperty( fromWidget );
397 changed = true;
398 }
399 }
400 if (changed)
401 {
402 d->m_conf->writeConfig();
403 emit settingsChanged();
404 }
405}
406
407QByteArray KConfigDialogManager::getUserProperty(const QWidget *widget) const
408{
409 if (!s_propertyMap->contains(widget->metaObject()->className())) {
410 const QMetaObject *metaObject = widget->metaObject();
411 const QMetaProperty user = metaObject->userProperty();
412 if ( user.isValid() ) {
413 s_propertyMap->insert( widget->metaObject()->className(), user.name() );
414 //kDebug(d->debugArea()) << "class name: '" << widget->metaObject()->className()
415 //<< " 's USER property: " << metaProperty.name() << endl;
416 }
417 else {
418 return QByteArray(); //no USER property
419 }
420 }
421 const QComboBox *cb = qobject_cast<const QComboBox *>(widget);
422 if (cb) {
423 const char *qcomboUserPropertyName = cb->QComboBox::metaObject()->userProperty().name();
424 const int qcomboUserPropertyIndex = qcomboUserPropertyName ? cb->QComboBox::metaObject()->indexOfProperty(qcomboUserPropertyName) : -1;
425 const char *widgetUserPropertyName = widget->metaObject()->userProperty().name();
426 const int widgetUserPropertyIndex = widgetUserPropertyName ? cb->metaObject()->indexOfProperty(widgetUserPropertyName) : -1;
427
428 if (qcomboUserPropertyIndex == widgetUserPropertyIndex) {
429 return QByteArray(); // use the q/kcombobox special code
430 }
431 }
432
433 return s_propertyMap->value( widget->metaObject()->className() );
434}
435
436QByteArray KConfigDialogManager::getCustomProperty(const QWidget *widget) const
437{
438 QVariant prop(widget->property("kcfg_property"));
439 if (prop.isValid()) {
440 if (!prop.canConvert(QVariant::ByteArray)) {
441 kWarning(d->debugArea()) << "kcfg_property on" << widget->metaObject()->className()
442 << "is not of type ByteArray";
443 } else {
444 return prop.toByteArray();
445 }
446 }
447 return QByteArray();
448}
449
450void KConfigDialogManager::setProperty(QWidget *w, const QVariant &v)
451{
452/* QButtonGroup *bg = qobject_cast<QButtonGroup *>(w);
453 if (bg)
454 {
455 QAbstractButton *b = bg->button(v.toInt());
456 if (b)
457 b->setDown(true);
458 return;
459 }*/
460
461 QByteArray userproperty = getCustomProperty(w);
462 if (userproperty.isEmpty()) {
463 userproperty = getUserProperty(w);
464 }
465 if (userproperty.isEmpty()) {
466 QComboBox *cb = qobject_cast<QComboBox *>(w);
467 if (cb) {
468 if (cb->isEditable()) {
469 int i = cb->findText(v.toString());
470 if (i != -1) {
471 cb->setCurrentIndex(i);
472 } else {
473 cb->setEditText(v.toString());
474 }
475 } else {
476 cb->setCurrentIndex(v.toInt());
477 }
478 return;
479 }
480 }
481 if (userproperty.isEmpty()) {
482 kWarning(d->debugArea()) << w->metaObject()->className() << " widget not handled!";
483 return;
484 }
485
486 w->setProperty(userproperty, v);
487}
488
489QVariant KConfigDialogManager::property(QWidget *w) const
490{
491/* QButtonGroup *bg = qobject_cast<QButtonGroup *>(w);
492 if (bg && bg->checkedButton())
493 return QVariant(bg->id(bg->checkedButton()));*/
494
495 QByteArray userproperty = getCustomProperty(w);
496 if (userproperty.isEmpty()) {
497 userproperty = getUserProperty(w);
498 }
499 if (userproperty.isEmpty()) {
500 QComboBox *cb = qobject_cast<QComboBox *>(w);
501 if (cb) {
502 if (cb->isEditable()) {
503 return QVariant(cb->currentText());
504 } else {
505 return QVariant(cb->currentIndex());
506 }
507 }
508 }
509 if (userproperty.isEmpty()) {
510 kWarning(d->debugArea()) << w->metaObject()->className() << " widget not handled!";
511 return QVariant();
512 }
513
514 return w->property(userproperty);
515}
516
517bool KConfigDialogManager::hasChanged() const
518{
519 QWidget *widget;
520 QHashIterator<QString, QWidget *> it( d->knownWidget) ;
521 while(it.hasNext()) {
522 it.next();
523 widget = it.value();
524
525 KConfigSkeletonItem *item = d->m_conf->findItem(it.key());
526 if (!item) {
527 kWarning(d->debugArea()) << "The setting '" << it.key() << "' has disappeared!";
528 continue;
529 }
530
531 if(!item->isEqual( property(widget) )) {
532 // kDebug(d->debugArea()) << "Widget for '" << it.key() << "' has changed.";
533 return true;
534 }
535 }
536 return false;
537}
538
539bool KConfigDialogManager::isDefault() const
540{
541 bool bUseDefaults = d->m_conf->useDefaults(true);
542 bool result = !hasChanged();
543 d->m_conf->useDefaults(bUseDefaults);
544 return result;
545}
546
547#include "kconfigdialogmanager.moc"
548
KConfigDialogManager
Provides a means of automatically retrieving, saving and resetting KConfigSkeleton based settings in ...
Definition: kconfigdialogmanager.h:85
KConfigDialogManager::setupWidget
void setupWidget(QWidget *widget, KConfigSkeletonItem *item)
Setup secondary widget properties.
Definition: kconfigdialogmanager.cpp:182
KConfigDialogManager::updateWidgetsDefault
void updateWidgetsDefault()
Traverse the specified widgets, sets the state of all known widgets according to the default state in...
Definition: kconfigdialogmanager.cpp:371
KConfigDialogManager::property
QVariant property(QWidget *w) const
Retrieve a property.
Definition: kconfigdialogmanager.cpp:489
KConfigDialogManager::initMaps
static void initMaps()
Initializes the property maps.
Definition: kconfigdialogmanager.cpp:90
KConfigDialogManager::getCustomProperty
QByteArray getCustomProperty(const QWidget *widget) const
Find the property to use for a widget by querying the kcfg_property property of the widget.
Definition: kconfigdialogmanager.cpp:436
KConfigDialogManager::getUserProperty
QByteArray getUserProperty(const QWidget *widget) const
Finds the USER property name using Qt's MetaProperty system, and caches it in the property map (the c...
Definition: kconfigdialogmanager.cpp:407
KConfigDialogManager::~KConfigDialogManager
~KConfigDialogManager()
Destructor.
Definition: kconfigdialogmanager.cpp:85
KConfigDialogManager::changedMap
static QHash< QString, QByteArray > * changedMap()
Retrieve the widget change map.
Definition: kconfigdialogmanager.cpp:162
KConfigDialogManager::widgetModified
void widgetModified()
If retrieveSettings() was told to track changes then if any known setting was changed this signal wil...
KConfigDialogManager::propertyMap
static QHash< QString, QByteArray > * propertyMap()
Retrieve the property map.
Definition: kconfigdialogmanager.cpp:156
KConfigDialogManager::settingsChanged
void settingsChanged()
One or more of the settings have been saved (such as when the user clicks on the Apply button).
KConfigDialogManager::updateWidgets
void updateWidgets()
Traverse the specified widgets, sets the state of all known widgets according to the state in the set...
Definition: kconfigdialogmanager.cpp:332
KConfigDialogManager::KConfigDialogManager
KConfigDialogManager(QWidget *parent, KCoreConfigSkeleton *conf)
Constructor.
Definition: kconfigdialogmanager.cpp:69
KConfigDialogManager::setProperty
void setProperty(QWidget *w, const QVariant &v)
Set a property.
Definition: kconfigdialogmanager.cpp:450
KConfigDialogManager::addWidget
void addWidget(QWidget *widget)
Add additional widgets to manage.
Definition: kconfigdialogmanager.cpp:177
KConfigDialogManager::hasChanged
bool hasChanged() const
Returns whether the current state of the known widgets are different from the state in the config obj...
Definition: kconfigdialogmanager.cpp:517
KConfigDialogManager::parseChildren
bool parseChildren(const QWidget *widget, bool trackChanges)
Recursive function that finds all known children.
Definition: kconfigdialogmanager.cpp:225
KConfigDialogManager::updateSettings
void updateSettings()
Traverse the specified widgets, saving the settings of all known widgets in the settings object.
Definition: kconfigdialogmanager.cpp:378
KConfigDialogManager::isDefault
bool isDefault() const
Returns whether the current state of the known widgets are the same as the default state in the confi...
Definition: kconfigdialogmanager.cpp:539
KConfigDialogManager::init
void init(bool trackChanges)
Definition: kconfigdialogmanager.cpp:168
KConfigSkeletonItem
KConfigSkeletonItem::isEqual
virtual bool isEqual(const QVariant &p) const=0
KConfigSkeletonItem::isImmutable
bool isImmutable() const
KConfigSkeletonItem::minValue
virtual QVariant minValue() const
KConfigSkeletonItem::whatsThis
QString whatsThis() const
KConfigSkeletonItem::toolTip
QString toolTip() const
KConfigSkeletonItem::setProperty
virtual void setProperty(const QVariant &p)=0
KConfigSkeletonItem::maxValue
virtual QVariant maxValue() const
KConfigSkeletonItem::property
virtual QVariant property() const=0
KConfigSkeleton
Class for handling preferences settings for an application.
Definition: kconfigskeleton.h:41
KUrl
QComboBox
QGroupBox
QHash
QLabel
QList
QObject
QWidget
K_GLOBAL_STATIC
#define K_GLOBAL_STATIC(TYPE, NAME)
kDebug
#define kDebug
kWarning
#define kWarning
MyHash
QHash< QString, QByteArray > MyHash
Definition: kconfigdialogmanager.cpp:39
kconfigdialogmanager.h
kconfigskeleton.h
kdebug.h
kglobal.h
KCoreConfigSkeleton
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDEUI

Skip menu "KDEUI"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal