Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
treewidgeteditor.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3// Qt-Security score:significant reason:default
4
6#include <formwindowbase_p.h>
7#include <iconloader_p.h>
8#include <qdesigner_command_p.h>
9#include <qdesigner_utils_p.h>
10#include <abstractformbuilder.h>
11#include <designerpropertymanager.h>
12#include <qttreepropertybrowser_p.h>
13
14#include <QtDesigner/abstractformwindow.h>
15#include <QtDesigner/abstractformeditor.h>
16
17#include <QtCore/qdir.h>
18#include <QtCore/qqueue.h>
19#include <QtWidgets/qheaderview.h>
20#include <QtWidgets/qtreewidgetitemiterator.h>
21
23
24using namespace Qt::StringLiterals;
25
26namespace qdesigner_internal {
27
28TreeWidgetEditor::TreeWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog)
29 : AbstractItemEditor(form, nullptr), m_updatingBrowser(false)
30{
31 m_columnEditor = new ItemListEditor(form, this);
32 m_columnEditor->setObjectName(u"columnEditor"_s);
33 m_columnEditor->setNewItemText(tr("New Column"));
34 ui.setupUi(dialog);
35
36 injectPropertyBrowser(ui.itemsTab, ui.widget);
37 connect(ui.showPropertiesButton, &QAbstractButton::clicked,
38 this, &TreeWidgetEditor::togglePropertyBrowser);
39 setPropertyBrowserVisible(false);
40
41 ui.tabWidget->insertTab(0, m_columnEditor, tr("&Columns"));
42 ui.tabWidget->setCurrentIndex(0);
43
44 ui.newItemButton->setIcon(createIconSet("plus.png"_L1));
45 ui.newSubItemButton->setIcon(createIconSet("downplus.png"_L1));
46 ui.deleteItemButton->setIcon(createIconSet("minus.png"_L1));
47 ui.moveItemUpButton->setIcon(createIconSet("up.png"_L1));
48 ui.moveItemDownButton->setIcon(createIconSet("down.png"_L1));
49 ui.moveItemRightButton->setIcon(createIconSet("leveldown.png"_L1));
50 ui.moveItemLeftButton->setIcon(createIconSet("levelup.png"_L1));
51
52 ui.treeWidget->header()->setSectionsMovable(false);
53
54 connect(ui.newItemButton, &QAbstractButton::clicked,
55 this, &TreeWidgetEditor::newItemButtonClicked);
56 connect(ui.newSubItemButton, &QAbstractButton::clicked,
57 this, &TreeWidgetEditor::newSubItemButtonClicked);
58 connect(ui.moveItemUpButton, &QAbstractButton::clicked,
59 this, &TreeWidgetEditor::moveItemUpButtonClicked);
60 connect(ui.moveItemDownButton, &QAbstractButton::clicked,
61 this, &TreeWidgetEditor::moveItemDownButtonClicked);
62 connect(ui.moveItemRightButton, &QAbstractButton::clicked,
63 this, &TreeWidgetEditor::moveItemRightButtonClicked);
64 connect(ui.moveItemLeftButton, &QAbstractButton::clicked,
65 this, &TreeWidgetEditor::moveItemLeftButtonClicked);
66 connect(ui.deleteItemButton, &QAbstractButton::clicked,
67 this, &TreeWidgetEditor::deleteItemButtonClicked);
68 connect(ui.treeWidget, &QTreeWidget::currentItemChanged,
69 this, &TreeWidgetEditor::treeWidgetCurrentItemChanged);
70 connect(ui.treeWidget, &QTreeWidget::itemChanged,
71 this, &TreeWidgetEditor::treeWidgetItemChanged);
72
73 connect(m_columnEditor, &ItemListEditor::indexChanged,
74 this, &TreeWidgetEditor::columnEditorIndexChanged);
75 connect(m_columnEditor, &ItemListEditor::itemChanged,
76 this, &TreeWidgetEditor::columnEditorItemChanged);
77 connect(m_columnEditor, &ItemListEditor::itemInserted,
78 this, &TreeWidgetEditor::columnEditorItemInserted);
79 connect(m_columnEditor, &ItemListEditor::itemDeleted,
80 this, &TreeWidgetEditor::columnEditorItemDeleted);
81 connect(m_columnEditor, &ItemListEditor::itemMovedUp,
82 this, &TreeWidgetEditor::columnEditorItemMovedUp);
83 connect(m_columnEditor, &ItemListEditor::itemMovedDown,
84 this, &TreeWidgetEditor::columnEditorItemMovedDown);
85
86 connect(iconCache(), &DesignerIconCache::reloaded, this, &TreeWidgetEditor::cacheReloaded);
87}
88
101
115
118 { 0, 0, nullptr, nullptr }
119};
120
121QtVariantProperty *TreeWidgetEditor::setupPropertyGroup(const QString &title, PropertyDefinition *propDefs)
122{
123 setupProperties(propDefs);
124 QtVariantProperty *groupProp = m_propertyManager->addProperty(QtVariantPropertyManager::groupTypeId(), title);
125 for (QtVariantProperty *prop : std::as_const(m_rootProperties))
126 groupProp->addSubProperty(prop);
127 m_rootProperties.clear();
128 return groupProp;
129}
130
132{
133 TreeWidgetContents treeCont;
134 treeCont.fromTreeWidget(treeWidget, false);
135 treeCont.applyToTreeWidget(ui.treeWidget, iconCache(), true);
136
137 treeCont.m_headerItem.applyToListWidget(m_columnEditor->listWidget(), iconCache(), true);
138 m_columnEditor->setupEditor(treeWidget, treeHeaderPropList);
139
140 QList<QtVariantProperty*> rootProperties;
141 rootProperties.append(setupPropertyGroup(tr("Per column properties"), treeItemColumnPropList));
142 rootProperties.append(setupPropertyGroup(tr("Common properties"), treeItemCommonPropList));
143 m_rootProperties = rootProperties;
144 m_propertyBrowser->setPropertiesWithoutValueMarked(true);
145 m_propertyBrowser->setRootIsDecorated(false);
146 setupObject(treeWidget);
147
148 if (ui.treeWidget->topLevelItemCount() > 0)
149 ui.treeWidget->setCurrentItem(ui.treeWidget->topLevelItem(0));
150
151 updateEditor();
152
153 return treeCont;
154}
155
157{
158 TreeWidgetContents retVal;
159 retVal.fromTreeWidget(ui.treeWidget, true);
160 return retVal;
161}
162
163void TreeWidgetEditor::setItemData(int role, const QVariant &v)
164{
165 const int col = (role == ItemFlagsShadowRole) ? 0 : ui.treeWidget->currentColumn();
166 QVariant newValue = v;
167 BoolBlocker block(m_updatingBrowser);
168 if (role == Qt::FontRole && newValue.metaType().id() == QMetaType::QFont) {
169 QFont oldFont = ui.treeWidget->font();
170 QFont newFont = qvariant_cast<QFont>(newValue).resolve(oldFont);
171 newValue = QVariant::fromValue(newFont);
172 ui.treeWidget->currentItem()->setData(col, role, QVariant()); // force the right font with the current resolve mask is set (item view bug)
173 }
174 ui.treeWidget->currentItem()->setData(col, role, newValue);
175}
176
177QVariant TreeWidgetEditor::getItemData(int role) const
178{
179 const int col = (role == ItemFlagsShadowRole) ? 0 : ui.treeWidget->currentColumn();
180 return ui.treeWidget->currentItem()->data(col, role);
181}
182
184{
185 static const int flags = QTreeWidgetItem().flags();
186 return flags;
187}
188
189void TreeWidgetEditor::newItemButtonClicked()
190{
191 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
192 QTreeWidgetItem *newItem = nullptr;
193 ui.treeWidget->blockSignals(true);
194 if (curItem) {
195 if (curItem->parent())
196 newItem = new QTreeWidgetItem(curItem->parent(), curItem);
197 else
198 newItem = new QTreeWidgetItem(ui.treeWidget, curItem);
199 } else
200 newItem = new QTreeWidgetItem(ui.treeWidget);
201 const QString newItemText = tr("New Item");
202 newItem->setText(0, newItemText);
203 newItem->setData(0, Qt::DisplayPropertyRole, QVariant::fromValue(PropertySheetStringValue(newItemText)));
204 newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);
205 ui.treeWidget->blockSignals(false);
206
207 ui.treeWidget->setCurrentItem(newItem, qMax(ui.treeWidget->currentColumn(), 0));
208 updateEditor();
209 ui.treeWidget->editItem(newItem, ui.treeWidget->currentColumn());
210}
211
212void TreeWidgetEditor::newSubItemButtonClicked()
213{
214 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
215 if (!curItem)
216 return;
217
218 ui.treeWidget->blockSignals(true);
219 QTreeWidgetItem *newItem = new QTreeWidgetItem(curItem);
220 const QString newItemText = tr("New Subitem");
221 newItem->setText(0, newItemText);
222 newItem->setData(0, Qt::DisplayPropertyRole, QVariant::fromValue(PropertySheetStringValue(newItemText)));
223 newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);
224 ui.treeWidget->blockSignals(false);
225
226 ui.treeWidget->setCurrentItem(newItem, ui.treeWidget->currentColumn());
227 updateEditor();
228 ui.treeWidget->editItem(newItem, ui.treeWidget->currentColumn());
229}
230
231void TreeWidgetEditor::deleteItemButtonClicked()
232{
233 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
234 if (!curItem)
235 return;
236
237 QTreeWidgetItem *nextCurrent = nullptr;
238 if (curItem->parent()) {
239 int idx = curItem->parent()->indexOfChild(curItem);
240 if (idx == curItem->parent()->childCount() - 1)
241 idx--;
242 else
243 idx++;
244 if (idx < 0)
245 nextCurrent = curItem->parent();
246 else
247 nextCurrent = curItem->parent()->child(idx);
248 } else {
249 int idx = ui.treeWidget->indexOfTopLevelItem(curItem);
250 if (idx == ui.treeWidget->topLevelItemCount() - 1)
251 idx--;
252 else
253 idx++;
254 if (idx >= 0)
255 nextCurrent = ui.treeWidget->topLevelItem(idx);
256 }
257 closeEditors();
258 ui.treeWidget->blockSignals(true);
259 delete curItem;
260 ui.treeWidget->blockSignals(false);
261
262 if (nextCurrent)
263 ui.treeWidget->setCurrentItem(nextCurrent, ui.treeWidget->currentColumn());
264 updateEditor();
265}
266
267void TreeWidgetEditor::moveItemUpButtonClicked()
268{
269 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
270 if (!curItem)
271 return;
272
273 int idx;
274 if (curItem->parent())
275 idx = curItem->parent()->indexOfChild(curItem);
276 else
277 idx = ui.treeWidget->indexOfTopLevelItem(curItem);
278 if (idx == 0)
279 return;
280
281 QTreeWidgetItem *takenItem;
282 ui.treeWidget->blockSignals(true);
283 if (curItem->parent()) {
284 QTreeWidgetItem *parentItem = curItem->parent();
285 takenItem = parentItem->takeChild(idx);
286 parentItem->insertChild(idx - 1, takenItem);
287 } else {
288 takenItem = ui.treeWidget->takeTopLevelItem(idx);
289 ui.treeWidget->insertTopLevelItem(idx - 1, takenItem);
290 }
291 ui.treeWidget->blockSignals(false);
292
293 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
294 updateEditor();
295}
296
297void TreeWidgetEditor::moveItemDownButtonClicked()
298{
299 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
300 if (!curItem)
301 return;
302
303 int idx, idxCount;
304 if (curItem->parent()) {
305 idx = curItem->parent()->indexOfChild(curItem);
306 idxCount = curItem->parent()->childCount();
307 } else {
308 idx = ui.treeWidget->indexOfTopLevelItem(curItem);
309 idxCount = ui.treeWidget->topLevelItemCount();
310 }
311 if (idx == idxCount - 1)
312 return;
313
314 QTreeWidgetItem *takenItem;
315 ui.treeWidget->blockSignals(true);
316 if (curItem->parent()) {
317 QTreeWidgetItem *parentItem = curItem->parent();
318 takenItem = parentItem->takeChild(idx);
319 parentItem->insertChild(idx + 1, takenItem);
320 } else {
321 takenItem = ui.treeWidget->takeTopLevelItem(idx);
322 ui.treeWidget->insertTopLevelItem(idx + 1, takenItem);
323 }
324 ui.treeWidget->blockSignals(false);
325
326 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
327 updateEditor();
328}
329
330void TreeWidgetEditor::moveItemLeftButtonClicked()
331{
332 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
333 if (!curItem)
334 return;
335
336 QTreeWidgetItem *parentItem = curItem->parent();
337 if (!parentItem)
338 return;
339
340 ui.treeWidget->blockSignals(true);
341 QTreeWidgetItem *takenItem = parentItem->takeChild(parentItem->indexOfChild(curItem));
342 if (parentItem->parent()) {
343 int idx = parentItem->parent()->indexOfChild(parentItem);
344 parentItem->parent()->insertChild(idx, takenItem);
345 } else {
346 int idx = ui.treeWidget->indexOfTopLevelItem(parentItem);
347 ui.treeWidget->insertTopLevelItem(idx, takenItem);
348 }
349 ui.treeWidget->blockSignals(false);
350
351 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
352 updateEditor();
353}
354
355void TreeWidgetEditor::moveItemRightButtonClicked()
356{
357 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
358 if (!curItem)
359 return;
360
361 int idx, idxCount;
362 if (curItem->parent()) {
363 idx = curItem->parent()->indexOfChild(curItem);
364 idxCount = curItem->parent()->childCount();
365 } else {
366 idx = ui.treeWidget->indexOfTopLevelItem(curItem);
367 idxCount = ui.treeWidget->topLevelItemCount();
368 }
369 if (idx == idxCount - 1)
370 return;
371
372 QTreeWidgetItem *takenItem;
373 ui.treeWidget->blockSignals(true);
374 if (curItem->parent()) {
375 QTreeWidgetItem *parentItem = curItem->parent()->child(idx + 1);
376 takenItem = curItem->parent()->takeChild(idx);
377 parentItem->insertChild(0, takenItem);
378 } else {
379 QTreeWidgetItem *parentItem = ui.treeWidget->topLevelItem(idx + 1);
380 takenItem = ui.treeWidget->takeTopLevelItem(idx);
381 parentItem->insertChild(0, takenItem);
382 }
383 ui.treeWidget->blockSignals(false);
384
385 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
386 updateEditor();
387}
388
389void TreeWidgetEditor::togglePropertyBrowser()
390{
391 setPropertyBrowserVisible(!m_propertyBrowser->isVisible());
392}
393
394void TreeWidgetEditor::setPropertyBrowserVisible(bool v)
395{
396 ui.showPropertiesButton->setText(v ? tr("Properties &>>") : tr("Properties &<<"));
397 m_propertyBrowser->setVisible(v);
398}
399
400void TreeWidgetEditor::treeWidgetCurrentItemChanged()
401{
402 m_columnEditor->setCurrentIndex(ui.treeWidget->currentColumn());
403 updateEditor();
404}
405
406void TreeWidgetEditor::treeWidgetItemChanged(QTreeWidgetItem *item, int column)
407{
408 if (m_updatingBrowser)
409 return;
410
411 PropertySheetStringValue val = qvariant_cast<PropertySheetStringValue>(item->data(column, Qt::DisplayPropertyRole));
412 val.setValue(item->text(column));
413 BoolBlocker block(m_updatingBrowser);
414 item->setData(column, Qt::DisplayPropertyRole, QVariant::fromValue(val));
415
417}
418
419void TreeWidgetEditor::columnEditorIndexChanged(int idx)
420{
421 if (QTreeWidgetItem *item = ui.treeWidget->currentItem())
422 ui.treeWidget->setCurrentItem(item, idx);
423}
424
425void TreeWidgetEditor::columnEditorItemChanged(int idx, int role, const QVariant &v)
426{
427 if (role == Qt::DisplayPropertyRole)
428 ui.treeWidget->headerItem()->setData(idx, Qt::EditRole, qvariant_cast<PropertySheetStringValue>(v).value());
429 ui.treeWidget->headerItem()->setData(idx, role, v);
430}
431
432void TreeWidgetEditor::updateEditor()
433{
434 QTreeWidgetItem *current = ui.treeWidget->currentItem();
435
436 bool itemsEnabled = false;
437 bool currentItemEnabled = false;
438 bool moveItemUpEnabled = false;
439 bool moveItemDownEnabled = false;
440 bool moveItemRightEnabled = false;
441 bool moveItemLeftEnabled = false;
442
443 if (ui.treeWidget->columnCount() > 0) {
444 itemsEnabled = true;
445 if (current) {
446 int idx;
447 int idxCount;
448 currentItemEnabled = true;
449 if (current->parent()) {
450 moveItemLeftEnabled = true;
451 idx = current->parent()->indexOfChild(current);
452 idxCount = current->parent()->childCount();
453 } else {
454 idx = ui.treeWidget->indexOfTopLevelItem(current);
455 idxCount = ui.treeWidget->topLevelItemCount();
456 }
457 if (idx > 0)
458 moveItemUpEnabled = true;
459 if (idx < idxCount - 1) {
460 moveItemDownEnabled = true;
461 moveItemRightEnabled = true;
462 }
463 }
464 }
465 ui.tabWidget->setTabEnabled(1, itemsEnabled);
466 ui.newSubItemButton->setEnabled(currentItemEnabled);
467 ui.deleteItemButton->setEnabled(currentItemEnabled);
468
469 ui.moveItemUpButton->setEnabled(moveItemUpEnabled);
470 ui.moveItemDownButton->setEnabled(moveItemDownEnabled);
471 ui.moveItemRightButton->setEnabled(moveItemRightEnabled);
472 ui.moveItemLeftButton->setEnabled(moveItemLeftEnabled);
473
474 if (current)
476 else
477 m_propertyBrowser->clear();
478}
479
480void TreeWidgetEditor::moveColumnItems(const PropertyDefinition *propList,
481 QTreeWidgetItem *item, int fromColumn, int toColumn, int step)
482{
483 BoolBlocker block(m_updatingBrowser);
484
485 QList<QVariant> saveCol;
486 for (int j = 0; propList[j].name; j++)
487 saveCol.append(item->data(toColumn, propList[j].role));
488 QVariant editVariant = item->data(toColumn, Qt::EditRole);
489 QVariant toolTipVariant = item->data(toColumn, Qt::ToolTipRole);
490 QVariant statusTipVariant = item->data(toColumn, Qt::StatusTipRole);
491 QVariant whatsThisVariant = item->data(toColumn, Qt::WhatsThisRole);
492 QVariant decorationVariant = item->data(toColumn, Qt::DecorationRole);
493 for (int i = toColumn; i != fromColumn; i += step) {
494 for (int j = 0; propList[j].name; j++)
495 item->setData(i, propList[j].role, item->data(i + step, propList[j].role));
496 item->setData(i, Qt::EditRole, item->data(i + step, Qt::EditRole));
497 item->setData(i, Qt::ToolTipRole, item->data(i + step, Qt::ToolTipRole));
498 item->setData(i, Qt::StatusTipRole, item->data(i + step, Qt::StatusTipRole));
499 item->setData(i, Qt::WhatsThisRole, item->data(i + step, Qt::WhatsThisRole));
500 item->setData(i, Qt::DecorationRole, item->data(i + step, Qt::DecorationRole));
501 }
502 for (int j = 0; propList[j].name; j++)
503 item->setData(fromColumn, propList[j].role, saveCol[j]);
504 item->setData(fromColumn, Qt::EditRole, editVariant);
505 item->setData(fromColumn, Qt::ToolTipRole, toolTipVariant);
506 item->setData(fromColumn, Qt::StatusTipRole, statusTipVariant);
507 item->setData(fromColumn, Qt::WhatsThisRole, whatsThisVariant);
508 item->setData(fromColumn, Qt::DecorationRole, decorationVariant);
509}
510
511void TreeWidgetEditor::moveColumns(int fromColumn, int toColumn, int step)
512{
513 ui.treeWidget->blockSignals(true);
514
515 moveColumnItems(treeHeaderPropList, ui.treeWidget->headerItem(), fromColumn, toColumn, step);
516
517 QQueue<QTreeWidgetItem *> pendingQueue;
518 for (int i = 0; i < ui.treeWidget->topLevelItemCount(); i++)
519 pendingQueue.enqueue(ui.treeWidget->topLevelItem(i));
520
521 while (!pendingQueue.isEmpty()) {
522 QTreeWidgetItem *item = pendingQueue.dequeue();
523 for (int i = 0; i < item->childCount(); i++)
524 pendingQueue.enqueue(item->child(i));
525
526 moveColumnItems(treeItemColumnPropList, item, fromColumn, toColumn, step);
527 }
528
529 ui.treeWidget->blockSignals(false);
530}
531
532void TreeWidgetEditor::moveColumnsLeft(int fromColumn, int toColumn)
533{
534 if (fromColumn >= toColumn)
535 return;
536
537 moveColumns(fromColumn, toColumn, -1);
538}
539
540void TreeWidgetEditor::moveColumnsRight(int fromColumn, int toColumn)
541{
542 if (fromColumn >= toColumn)
543 return;
544
545 moveColumns(toColumn, fromColumn, 1);
546}
547
548void TreeWidgetEditor::columnEditorItemInserted(int idx)
549{
550 int columnCount = ui.treeWidget->columnCount();
551 ui.treeWidget->setColumnCount(columnCount + 1);
552 ui.treeWidget->headerItem()->setText(columnCount, m_columnEditor->newItemText());
553 moveColumnsLeft(idx, columnCount);
554
555 updateEditor();
556}
557
558void TreeWidgetEditor::columnEditorItemDeleted(int idx)
559{
560 closeEditors();
561
562 int columnCount = ui.treeWidget->columnCount() - 1;
563 if (!columnCount)
564 ui.treeWidget->clear();
565 else
566 moveColumnsRight(idx, columnCount);
567 ui.treeWidget->setColumnCount(columnCount);
568
569 updateEditor();
570}
571
572void TreeWidgetEditor::columnEditorItemMovedUp(int idx)
573{
574 moveColumnsRight(idx - 1, idx);
575
576 ui.treeWidget->setCurrentItem(ui.treeWidget->currentItem(), idx - 1);
577 updateEditor();
578}
579
580void TreeWidgetEditor::columnEditorItemMovedDown(int idx)
581{
582 moveColumnsLeft(idx, idx + 1);
583
584 ui.treeWidget->setCurrentItem(ui.treeWidget->currentItem(), idx + 1);
585 updateEditor();
586}
587
588void TreeWidgetEditor::closeEditors()
589{
590 if (QTreeWidgetItem *cur = ui.treeWidget->currentItem() ) {
591 const int numCols = cur->columnCount ();
592 for (int i = 0; i < numCols; i++)
593 ui.treeWidget->closePersistentEditor (cur, i);
594 }
595}
596
597void TreeWidgetEditor::cacheReloaded()
598{
599 reloadIconResources(iconCache(), ui.treeWidget);
600}
601
602TreeWidgetEditorDialog::TreeWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent) :
603 QDialog(parent), m_editor(form, this)
604{
605}
606
608{
609 return m_editor.fillContentsFromTreeWidget(treeWidget);
610}
611
613{
614 return m_editor.contents();
615}
616
617} // namespace qdesigner_internal
618
619QT_END_NAMESPACE
friend class QWidget
Definition qpainter.h:432
The QtVariantPropertyManager class provides and manages QVariant based properties.
static int flagTypeId()
Returns the type id for a flag property.
The QtVariantProperty class is a convenience class handling QVariant based properties.
DesignerIconCache * iconCache() const
TreeWidgetContents fillContentsFromTreeWidget(QTreeWidget *treeWidget)
TreeWidgetContents fillContentsFromTreeWidget(QTreeWidget *treeWidget)
QVariant getItemData(int role) const override
Combined button and popup list for selecting options.
Auxiliary methods to store/retrieve settings.
static AbstractItemEditor::PropertyDefinition treeHeaderPropList[]
static AbstractItemEditor::PropertyDefinition treeItemCommonPropList[]
static AbstractItemEditor::PropertyDefinition treeItemColumnPropList[]