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