maxLibQt
TreeComboBox Class Reference

A QComboBox control which works with a tree-based data model & view, allowing drill-down selection of items. More...

#include "TreeComboBox.h"

Inherits QComboBox.

Properties

bool autoData
 
- Properties inherited from QComboBox
 autoCompletion
 
 autoCompletionCaseSensitivity
 
 count
 
 currentData
 
 currentIndex
 
 currentText
 
 duplicatesEnabled
 
 editable
 
 frame
 
 iconSize
 
 insertPolicy
 
 maxCount
 
 maxVisibleItems
 
 minimumContentsLength
 
 modelColumn
 
 sizeAdjustPolicy
 
- Properties inherited from QWidget
 acceptDrops
 
 accessibleDescription
 
 accessibleName
 
 autoFillBackground
 
 baseSize
 
 childrenRect
 
 childrenRegion
 
 contextMenuPolicy
 
 cursor
 
 enabled
 
 focus
 
 focusPolicy
 
 font
 
 frameGeometry
 
 frameSize
 
 fullScreen
 
 geometry
 
 height
 
 inputMethodHints
 
 isActiveWindow
 
 layoutDirection
 
 locale
 
 maximized
 
 maximumHeight
 
 maximumSize
 
 maximumWidth
 
 minimized
 
 minimumHeight
 
 minimumSize
 
 minimumSizeHint
 
 minimumWidth
 
 modal
 
 mouseTracking
 
 normalGeometry
 
 palette
 
 pos
 
 rect
 
 size
 
 sizeHint
 
 sizeIncrement
 
 sizePolicy
 
 statusTip
 
 styleSheet
 
 tabletTracking
 
 toolTip
 
 toolTipDuration
 
 updatesEnabled
 
 visible
 
 whatsThis
 
 width
 
 windowFilePath
 
 windowFlags
 
 windowIcon
 
 windowIconText
 
 windowModality
 
 windowModified
 
 windowOpacity
 
 windowTitle
 
 x
 
 y
 
- Properties inherited from QObject
 objectName
 

Public Member Functions

 TreeComboBox (QWidget *parent=Q_NULLPTR)
 
QModelIndex addItem (const QString &text, const QModelIndex &parentIndex, const QVariant &userData=QVariant())
 
QModelIndex addItem (const QIcon &icon, const QString &text, const QModelIndex &parentIndex, const QVariant &userData=QVariant())
 
void addItem (const QString &text, const QVariant &userData=QVariant())
 
void addItem (const QIcon &icon, const QString &text, const QVariant &userData=QVariant())
 
void addItems (const QStringList &texts, const QModelIndex &parentIndex)
 
void addItems (const QStringList &texts)
 
QModelIndex addParentItem (const QString &text, const bool selectable=false, const QModelIndex &parentIndex=QModelIndex(), const QVariant &userData=QVariant())
 
QModelIndex addParentItem (const QIcon &icon, const QString &text, const bool selectable=false, const QModelIndex &parentIndex=QModelIndex(), const QVariant &userData=QVariant())
 
bool autoData () const
 
QVariant currentData (int role=Qt::UserRole) const
 Reimplemented from superclass. More...
 
int currentIndex () const
 Reimplemented from superclass. More...
 
virtual bool eventFilter (QObject *object, QEvent *event) override
 Reimplemented from superclass. More...
 
int findData (const QVariant &data, int role=Qt::UserRole, Qt::MatchFlags flags=Qt::MatchFlags(Qt::MatchExactly|Qt::MatchCaseSensitive)) const
 Reimplemented from superclass. More...
 
int findText (const QString &text, Qt::MatchFlags flags=Qt::MatchFlags(Qt::MatchExactly|Qt::MatchCaseSensitive)) const
 
virtual void hidePopup () override
 Reimplemented from superclass. More...
 
QModelIndex insertItem (int index, const QMap< int, QVariant > &values=QMap< int, QVariant >(), const QModelIndex &parentIndex=QModelIndex(), const bool reload=true)
 Insert an item at given index (row), with optional data values, under parent item indicated by parentIndex. More...
 
QModelIndex insertItem (int index, const QIcon &icon, const QString &text, const QModelIndex &parentIndex, const QVariant &userData=QVariant(), const bool reload=true)
 Like QComboBox::insertItem but adds ability to specify a parent item. More...
 
void insertItem (int index, const QIcon &icon, const QString &text, const QVariant &userData=QVariant())
 
void insertItem (int index, const QString &text, const QVariant &userData=QVariant())
 
void insertItems (int index, const QStringList &texts, const QModelIndex &parentIndex)
 Inserts multiple items from a list as children of parentIndex. More...
 
void insertItems (int index, const QStringList &texts)
 
QModelIndex insertParentItem (int index, const QIcon &icon, const QString &text, const bool selectable=false, const QModelIndex &parentIndex=QModelIndex(), const QVariant &userData=QVariant())
 Inserts an item and marks is as a "parent" type item. More...
 
QVariant itemData (int index, int role=Qt::UserRole) const
 Reimplemented from superclass. More...
 
QIcon itemIcon (int index) const
 Reimplemented from superclass. More...
 
QString itemText (int index) const
 
virtual void keyPressEvent (QKeyEvent *event) override
 Reimplemented from superclass. More...
 
void setItemData (const QModelIndex &index, const QVariant &value, int role=Qt::UserRole)
 Sets the data role for the item at index to the specified value. More...
 
void setItemData (int index, const QVariant &value, int role=Qt::UserRole)
 
void setItemIcon (int index, const QIcon &icon)
 
void setItemText (int index, const QString &text)
 
void setModel (QAbstractItemModel *model)
 Reimplemented from superclass. More...
 
void setView (QAbstractItemView *itemView=Q_NULLPTR)
 Like QComboBox::setView but only accepts QTreeView (and derived) view classes. More...
 
virtual void showPopup () override
 Reimplemented from superclass. More...
 
QTreeViewview () const
 
virtual void wheelEvent (QWheelEvent *event) override
 Reimplemented from superclass. More...
 
- Public Member Functions inherited from QComboBox
 QComboBox (QWidget *parent)
 
virtual ~QComboBox ()
 
void activated (int index)
 
void activated (const QString &text)
 
void addItem (const QString &text, const QVariant &userData)
 
void addItem (const QIcon &icon, const QString &text, const QVariant &userData)
 
void addItems (const QStringList &texts)
 
bool autoCompletion () const const
 
Qt::CaseSensitivity autoCompletionCaseSensitivity () const const
 
void clear ()
 
void clearEditText ()
 
QCompletercompleter () const const
 
int count () const const
 
QVariant currentData (int role) const const
 
int currentIndex () const const
 
void currentIndexChanged (int index)
 
void currentIndexChanged (const QString &text)
 
QString currentText () const const
 
void currentTextChanged (const QString &text)
 
bool duplicatesEnabled () const const
 
void editTextChanged (const QString &text)
 
virtual bool event (QEvent *event) override
 
int findData (const QVariant &data, int role, Qt::MatchFlags flags) const const
 
int findText (const QString &text, Qt::MatchFlags flags) const const
 
bool hasFrame () const const
 
void highlighted (int index)
 
void highlighted (const QString &text)
 
QSize iconSize () const const
 
virtual QVariant inputMethodQuery (Qt::InputMethodQuery query) const const override
 
void insertItem (int index, const QString &text, const QVariant &userData)
 
void insertItem (int index, const QIcon &icon, const QString &text, const QVariant &userData)
 
void insertItems (int index, const QStringList &list)
 
QComboBox::InsertPolicy insertPolicy () const const
 
void insertSeparator (int index)
 
bool isEditable () const const
 
QVariant itemData (int index, int role) const const
 
QAbstractItemDelegateitemDelegate () const const
 
QIcon itemIcon (int index) const const
 
QString itemText (int index) const const
 
QLineEditlineEdit () const const
 
int maxCount () const const
 
int maxVisibleItems () const const
 
virtual const QMetaObjectmetaObject () const const
 
int minimumContentsLength () const const
 
virtual QSize minimumSizeHint () const const override
 
QAbstractItemModelmodel () const const
 
int modelColumn () const const
 
virtual int qt_metacall (QMetaObject::Call, int, void **)
 
virtual void * qt_metacast (const char *)
 
void removeItem (int index)
 
QModelIndex rootModelIndex () const const
 
void setAutoCompletion (bool enable)
 
void setAutoCompletionCaseSensitivity (Qt::CaseSensitivity sensitivity)
 
void setCompleter (QCompleter *completer)
 
void setCurrentIndex (int index)
 
void setCurrentText (const QString &text)
 
void setDuplicatesEnabled (bool enable)
 
void setEditable (bool editable)
 
void setEditText (const QString &text)
 
void setFrame (bool)
 
void setIconSize (const QSize &size)
 
void setInsertPolicy (QComboBox::InsertPolicy policy)
 
void setItemData (int index, const QVariant &value, int role)
 
void setItemDelegate (QAbstractItemDelegate *delegate)
 
void setItemIcon (int index, const QIcon &icon)
 
void setItemText (int index, const QString &text)
 
void setLineEdit (QLineEdit *edit)
 
void setMaxCount (int max)
 
void setMaxVisibleItems (int maxItems)
 
void setMinimumContentsLength (int characters)
 
void setModel (QAbstractItemModel *model)
 
void setModelColumn (int visibleColumn)
 
void setRootModelIndex (const QModelIndex &index)
 
void setSizeAdjustPolicy (QComboBox::SizeAdjustPolicy policy)
 
void setValidator (const QValidator *validator)
 
void setView (QAbstractItemView *itemView)
 
QComboBox::SizeAdjustPolicy sizeAdjustPolicy () const const
 
virtual QSize sizeHint () const const override
 
const QValidatorvalidator () const const
 
QAbstractItemViewview () const const
 
- Public Member Functions inherited from QWidget
 QWidget (QWidget *parent, Qt::WindowFlags f)
 
virtual ~QWidget ()
 
bool acceptDrops () const const
 
QString accessibleDescription () const const
 
QString accessibleName () const const
 
QList< QAction * > actions () const const
 
void activateWindow ()
 
void addAction (QAction *action)
 
void addActions (QList< QAction * > actions)
 
void adjustSize ()
 
bool autoFillBackground () const const
 
QPalette::ColorRole backgroundRole () const const
 
QBackingStorebackingStore () const const
 
QSize baseSize () const const
 
QWidgetchildAt (const QPoint &p) const const
 
QWidgetchildAt (int x, int y) const const
 
QRect childrenRect () const const
 
QRegion childrenRegion () const const
 
void clearFocus ()
 
void clearMask ()
 
bool close ()
 
QMargins contentsMargins () const const
 
QRect contentsRect () const const
 
Qt::ContextMenuPolicy contextMenuPolicy () const const
 
QCursor cursor () const const
 
void customContextMenuRequested (const QPoint &pos)
 
WId effectiveWinId () const const
 
void ensurePolished () const const
 
Qt::FocusPolicy focusPolicy () const const
 
QWidgetfocusProxy () const const
 
QWidgetfocusWidget () const const
 
const QFontfont () const const
 
QFontInfo fontInfo () const const
 
QFontMetrics fontMetrics () const const
 
QPalette::ColorRole foregroundRole () const const
 
QRect frameGeometry () const const
 
QSize frameSize () const const
 
const QRectgeometry () const const
 
void getContentsMargins (int *left, int *top, int *right, int *bottom) const const
 
QPixmap grab (const QRect &rectangle)
 
void grabGesture (Qt::GestureType gesture, Qt::GestureFlags flags)
 
void grabKeyboard ()
 
void grabMouse ()
 
void grabMouse (const QCursor &cursor)
 
int grabShortcut (const QKeySequence &key, Qt::ShortcutContext context)
 
QGraphicsEffectgraphicsEffect () const const
 
QGraphicsProxyWidgetgraphicsProxyWidget () const const
 
bool hasEditFocus () const const
 
bool hasFocus () const const
 
virtual bool hasHeightForWidth () const const
 
bool hasMouseTracking () const const
 
bool hasTabletTracking () const const
 
int height () const const
 
virtual int heightForWidth (int w) const const
 
void hide ()
 
Qt::InputMethodHints inputMethodHints () const const
 
void insertAction (QAction *before, QAction *action)
 
void insertActions (QAction *before, QList< QAction * > actions)
 
bool isActiveWindow () const const
 
bool isAncestorOf (const QWidget *child) const const
 
bool isEnabled () const const
 
bool isEnabledTo (const QWidget *ancestor) const const
 
bool isEnabledToTLW () const const
 
bool isFullScreen () const const
 
bool isHidden () const const
 
bool isMaximized () const const
 
bool isMinimized () const const
 
bool isModal () const const
 
bool isTopLevel () const const
 
bool isVisible () const const
 
bool isVisibleTo (const QWidget *ancestor) const const
 
bool isWindow () const const
 
bool isWindowModified () const const
 
QLayoutlayout () const const
 
Qt::LayoutDirection layoutDirection () const const
 
QLocale locale () const const
 
void lower ()
 
QPoint mapFrom (const QWidget *parent, const QPoint &pos) const const
 
QPoint mapFromGlobal (const QPoint &pos) const const
 
QPoint mapFromParent (const QPoint &pos) const const
 
QPoint mapTo (const QWidget *parent, const QPoint &pos) const const
 
QPoint mapToGlobal (const QPoint &pos) const const
 
QPoint mapToParent (const QPoint &pos) const const
 
QRegion mask () const const
 
int maximumHeight () const const
 
QSize maximumSize () const const
 
int maximumWidth () const const
 
int minimumHeight () const const
 
QSize minimumSize () const const
 
int minimumWidth () const const
 
void move (int x, int y)
 
void move (const QPoint &)
 
QWidgetnativeParentWidget () const const
 
QWidgetnextInFocusChain () const const
 
QRect normalGeometry () const const
 
void overrideWindowFlags (Qt::WindowFlags flags)
 
virtual QPaintEnginepaintEngine () const const override
 
const QPalettepalette () const const
 
QWidgetparentWidget () const const
 
QPoint pos () const const
 
QWidgetpreviousInFocusChain () const const
 
void raise ()
 
QRect rect () const const
 
void releaseKeyboard ()
 
void releaseMouse ()
 
void releaseShortcut (int id)
 
void removeAction (QAction *action)
 
void render (QPainter *painter, const QPoint &targetOffset, const QRegion &sourceRegion, QWidget::RenderFlags renderFlags)
 
void render (QPaintDevice *target, const QPoint &targetOffset, const QRegion &sourceRegion, QWidget::RenderFlags renderFlags)
 
void repaint ()
 
void repaint (int x, int y, int w, int h)
 
void repaint (const QRect &rect)
 
void repaint (const QRegion &rgn)
 
void resize (int w, int h)
 
void resize (const QSize &)
 
bool restoreGeometry (const QByteArray &geometry)
 
QByteArray saveGeometry () const const
 
void scroll (int dx, int dy)
 
void scroll (int dx, int dy, const QRect &r)
 
void setAcceptDrops (bool on)
 
void setAccessibleDescription (const QString &description)
 
void setAccessibleName (const QString &name)
 
void setAttribute (Qt::WidgetAttribute attribute, bool on)
 
void setAutoFillBackground (bool enabled)
 
void setBackgroundRole (QPalette::ColorRole role)
 
void setBaseSize (int basew, int baseh)
 
void setBaseSize (const QSize &)
 
void setContentsMargins (int left, int top, int right, int bottom)
 
void setContentsMargins (const QMargins &margins)
 
void setContextMenuPolicy (Qt::ContextMenuPolicy policy)
 
void setCursor (const QCursor &)
 
void setDisabled (bool disable)
 
void setEditFocus (bool enable)
 
void setEnabled (bool)
 
void setFixedHeight (int h)
 
void setFixedSize (int w, int h)
 
void setFixedSize (const QSize &s)
 
void setFixedWidth (int w)
 
void setFocus ()
 
void setFocus (Qt::FocusReason reason)
 
void setFocusPolicy (Qt::FocusPolicy policy)
 
void setFocusProxy (QWidget *w)
 
void setFont (const QFont &)
 
void setForegroundRole (QPalette::ColorRole role)
 
void setGeometry (const QRect &)
 
void setGeometry (int x, int y, int w, int h)
 
void setGraphicsEffect (QGraphicsEffect *effect)
 
void setHidden (bool hidden)
 
void setInputMethodHints (Qt::InputMethodHints hints)
 
void setLayout (QLayout *layout)
 
void setLayoutDirection (Qt::LayoutDirection direction)
 
void setLocale (const QLocale &locale)
 
void setMask (const QBitmap &bitmap)
 
void setMask (const QRegion &region)
 
void setMaximumHeight (int maxh)
 
void setMaximumSize (const QSize &)
 
void setMaximumSize (int maxw, int maxh)
 
void setMaximumWidth (int maxw)
 
void setMinimumHeight (int minh)
 
void setMinimumSize (const QSize &)
 
void setMinimumSize (int minw, int minh)
 
void setMinimumWidth (int minw)
 
void setMouseTracking (bool enable)
 
void setPalette (const QPalette &)
 
void setParent (QWidget *parent)
 
void setParent (QWidget *parent, Qt::WindowFlags f)
 
void setShortcutAutoRepeat (int id, bool enable)
 
void setShortcutEnabled (int id, bool enable)
 
void setSizeIncrement (const QSize &)
 
void setSizeIncrement (int w, int h)
 
void setSizePolicy (QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical)
 
void setSizePolicy (QSizePolicy)
 
void setStatusTip (const QString &)
 
void setStyle (QStyle *style)
 
void setStyleSheet (const QString &styleSheet)
 
void setTabletTracking (bool enable)
 
void setToolTip (const QString &)
 
void setToolTipDuration (int msec)
 
void setUpdatesEnabled (bool enable)
 
void setupUi (QWidget *widget)
 
virtual void setVisible (bool visible)
 
void setWhatsThis (const QString &)
 
void setWindowFilePath (const QString &filePath)
 
void setWindowFlag (Qt::WindowType flag, bool on)
 
void setWindowFlags (Qt::WindowFlags type)
 
void setWindowIcon (const QIcon &icon)
 
void setWindowIconText (const QString &)
 
void setWindowModality (Qt::WindowModality windowModality)
 
void setWindowModified (bool)
 
void setWindowOpacity (qreal level)
 
void setWindowRole (const QString &role)
 
void setWindowState (Qt::WindowStates windowState)
 
void setWindowTitle (const QString &)
 
void show ()
 
void showFullScreen ()
 
void showMaximized ()
 
void showMinimized ()
 
void showNormal ()
 
QSize size () const const
 
QSize sizeIncrement () const const
 
QSizePolicy sizePolicy () const const
 
void stackUnder (QWidget *w)
 
QString statusTip () const const
 
QStylestyle () const const
 
QString styleSheet () const const
 
bool testAttribute (Qt::WidgetAttribute attribute) const const
 
QString toolTip () const const
 
int toolTipDuration () const const
 
QWidgettopLevelWidget () const const
 
bool underMouse () const const
 
void ungrabGesture (Qt::GestureType gesture)
 
void unsetCursor ()
 
void unsetLayoutDirection ()
 
void unsetLocale ()
 
void update ()
 
void update (const QRegion &rgn)
 
void update (int x, int y, int w, int h)
 
void update (const QRect &rect)
 
void updateGeometry ()
 
bool updatesEnabled () const const
 
QRegion visibleRegion () const const
 
QString whatsThis () const const
 
int width () const const
 
QWidgetwindow () const const
 
QString windowFilePath () const const
 
Qt::WindowFlags windowFlags () const const
 
QWindowwindowHandle () const const
 
QIcon windowIcon () const const
 
void windowIconChanged (const QIcon &icon)
 
QString windowIconText () const const
 
void windowIconTextChanged (const QString &iconText)
 
Qt::WindowModality windowModality () const const
 
qreal windowOpacity () const const
 
QString windowRole () const const
 
Qt::WindowStates windowState () const const
 
QString windowTitle () const const
 
void windowTitleChanged (const QString &title)
 
Qt::WindowType windowType () const const
 
WId winId () const const
 
int x () const const
 
int y () const const
 
- Public Member Functions inherited from QObject
 QObject (QObject *parent)
 
virtual ~QObject ()
 
bool blockSignals (bool block)
 
const QObjectList & children () const const
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
 
void deleteLater ()
 
void destroyed (QObject *obj)
 
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
 
bool disconnect (const QObject *receiver, const char *method) const const
 
void dumpObjectInfo () const const
 
void dumpObjectInfo ()
 
void dumpObjectTree () const const
 
void dumpObjectTree ()
 
QList< QByteArraydynamicPropertyNames () const const
 
findChild (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegExp &regExp, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
 
bool inherits (const char *className) const const
 
void installEventFilter (QObject *filterObj)
 
bool isWidgetType () const const
 
bool isWindowType () const const
 
void killTimer (int id)
 
void moveToThread (QThread *targetThread)
 
QString objectName () const const
 
void objectNameChanged (const QString &objectName)
 
QObjectparent () const const
 
QVariant property (const char *name) const const
 
void removeEventFilter (QObject *obj)
 
void setObjectName (const QString &name)
 
void setParent (QObject *parent)
 
bool setProperty (const char *name, const QVariant &value)
 
bool signalsBlocked () const const
 
int startTimer (int interval, Qt::TimerType timerType)
 
int startTimer (std::chrono::milliseconds time, Qt::TimerType timerType)
 
QThreadthread () const const
 
- Public Member Functions inherited from QPaintDevice
virtual ~QPaintDevice ()
 
int colorCount () const const
 
int depth () const const
 
int devicePixelRatio () const const
 
qreal devicePixelRatioF () const const
 
int height () const const
 
int heightMM () const const
 
int logicalDpiX () const const
 
int logicalDpiY () const const
 
bool paintingActive () const const
 
int physicalDpiX () const const
 
int physicalDpiY () const const
 
int width () const const
 
int widthMM () const const
 

Public Slots

void clear ()
 Like QComboBox::clear() but does NOT remove any items from the current data model. More...
 
void keyboardSearchString (const QString &text)
 Reimplemented from superclass. More...
 
void setAutoData (bool enable)
 
int setCurrentData (const QVariant &data, const int defaultIdx=-1, int role=Qt::UserRole, Qt::MatchFlags flags=Qt::MatchFlags(Qt::MatchExactly|Qt::MatchCaseSensitive))
 This is a shortcut to using setCurrentIndex(findData()), and also returns the new index (like findData() would). More...
 
void setCurrentIndex (int index)
 Reimplemented from superclass. More...
 
void setCurrentIndex (const QModelIndex &index)
 Sets currently selected item to index using data model indices. More...
 
void setCurrentText (const QString &text)
 

Signals

void currentDataChanged (const QVariant &data)
 
void currentModelIndexChanged (const QModelIndex &index)
 

Protected Slots

void adjustPopupHeight ()
 Resize visible popup height when items are expanded/collapsed in the tree view. More...
 
void adjustPopupWidth ()
 Make sure tree view has a reasonable width. More...
 
int buildMap (QModelIndex parent=QModelIndex(), int row=0)
 Emitted along with currentIndexChanged() signals and if item has valid Qt::UserRole data. More...
 
void ensureCurrentExpanded ()
 Called before showing popup to make sure the initial view size is correct. More...
 
void reloadModel ()
 

Protected Member Functions

QModelIndex indexAbove (QModelIndex index)
 Find first valid item index which if before given index. More...
 
QModelIndex indexBelow (QModelIndex index)
 Find first valid item index which if after given index. More...
 
QModelIndex lastIndex (const QModelIndex &index)
 Find last (greatest) valid item index in a set (eg. More...
 
bool usePopup (QStyleOptionComboBox *option=NULL)
 Return true if style options are set to use a "popup" presentation style (typ. More...
 
- Protected Member Functions inherited from QComboBox
virtual void changeEvent (QEvent *e) override
 
virtual void contextMenuEvent (QContextMenuEvent *e) override
 
virtual void focusInEvent (QFocusEvent *e) override
 
virtual void focusOutEvent (QFocusEvent *e) override
 
virtual void hideEvent (QHideEvent *e) override
 
void initStyleOption (QStyleOptionComboBox *option) const const
 
virtual void inputMethodEvent (QInputMethodEvent *e) override
 
virtual void keyReleaseEvent (QKeyEvent *e) override
 
virtual void mousePressEvent (QMouseEvent *e) override
 
virtual void mouseReleaseEvent (QMouseEvent *e) override
 
virtual void paintEvent (QPaintEvent *e) override
 
virtual void resizeEvent (QResizeEvent *e) override
 
virtual void showEvent (QShowEvent *e) override
 
- Protected Member Functions inherited from QWidget
virtual void actionEvent (QActionEvent *event)
 
virtual void closeEvent (QCloseEvent *event)
 
void create (WId window, bool initializeWindow, bool destroyOldWindow)
 
void destroy (bool destroyWindow, bool destroySubWindows)
 
virtual void dragEnterEvent (QDragEnterEvent *event)
 
virtual void dragLeaveEvent (QDragLeaveEvent *event)
 
virtual void dragMoveEvent (QDragMoveEvent *event)
 
virtual void dropEvent (QDropEvent *event)
 
virtual void enterEvent (QEvent *event)
 
bool focusNextChild ()
 
virtual bool focusNextPrevChild (bool next)
 
bool focusPreviousChild ()
 
virtual void initPainter (QPainter *painter) const const override
 
virtual void leaveEvent (QEvent *event)
 
virtual int metric (QPaintDevice::PaintDeviceMetric m) const const override
 
virtual void mouseDoubleClickEvent (QMouseEvent *event)
 
virtual void mouseMoveEvent (QMouseEvent *event)
 
virtual void moveEvent (QMoveEvent *event)
 
virtual bool nativeEvent (const QByteArray &eventType, void *message, long *result)
 
virtual void tabletEvent (QTabletEvent *event)
 
void updateMicroFocus ()
 
- Protected Member Functions inherited from QObject
virtual void childEvent (QChildEvent *event)
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void customEvent (QEvent *event)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 
bool isSignalConnected (const QMetaMethod &signal) const const
 
int receivers (const char *signal) const const
 
QObjectsender () const const
 
int senderSignalIndex () const const
 
virtual void timerEvent (QTimerEvent *event)
 
- Protected Member Functions inherited from QPaintDevice
 QPaintDevice ()
 

Protected Attributes

bool m_autoData
 
QPersistentModelIndex m_currentIndex
 
QMap< int, QPersistentModelIndexm_indexMap
 
int m_nextDataId
 
QMap< QPersistentModelIndex, int > m_rowMap
 
bool m_skipNextHide
 
QTreeViewm_view
 

Additional Inherited Members

- Public Types inherited from QComboBox
enum  InsertPolicy
 
enum  SizeAdjustPolicy
 
- Public Types inherited from QWidget
enum  RenderFlag
 
- Public Types inherited from QPaintDevice
enum  PaintDeviceMetric
 
- Static Public Member Functions inherited from QComboBox
QString tr (const char *s, const char *c, int n)
 
QString trUtf8 (const char *s, const char *c, int n)
 
- Static Public Member Functions inherited from QWidget
QWidgetcreateWindowContainer (QWindow *window, QWidget *parent, Qt::WindowFlags flags)
 
QWidgetfind (WId id)
 
QWidgetkeyboardGrabber ()
 
QWidgetmouseGrabber ()
 
void setTabOrder (QWidget *first, QWidget *second)
 
QString tr (const char *s, const char *c, int n)
 
QString trUtf8 (const char *s, const char *c, int n)
 
- Static Public Member Functions inherited from QObject
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
 
bool disconnect (const QMetaObject::Connection &connection)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
QString tr (const char *sourceText, const char *disambiguation, int n)
 
QString trUtf8 (const char *sourceText, const char *disambiguation, int n)
 
- Public Attributes inherited from QComboBox
 AdjustToContents
 
 AdjustToContentsOnFirstShow
 
 AdjustToMinimumContentsLength
 
 AdjustToMinimumContentsLengthWithIcon
 
 InsertAfterCurrent
 
 InsertAlphabetically
 
 InsertAtBottom
 
 InsertAtCurrent
 
 InsertAtTop
 
 InsertBeforeCurrent
 
 NoInsert
 
- Public Attributes inherited from QWidget
 DrawChildren
 
 DrawWindowBackground
 
 IgnoreMask
 
typedef RenderFlags
 
- Public Attributes inherited from QPaintDevice
 PdmDepth
 
 PdmDevicePixelRatio
 
 PdmDevicePixelRatioScaled
 
 PdmDpiX
 
 PdmDpiY
 
 PdmHeight
 
 PdmHeightMM
 
 PdmNumColors
 
 PdmPhysicalDpiX
 
 PdmPhysicalDpiY
 
 PdmWidth
 
 PdmWidthMM
 

Detailed Description

A QComboBox control which works with a tree-based data model & view, allowing drill-down selection of items.

Version
1.0.0

TreeComboBox accepts a nested/tree data model and presents the first column of the data as choices in the dropdown. It respects the data model's settings as to which items are selectable or not (typically only the last-level "leaf" elements).

It works best when unique Qt::UserRole data is set on the items and used for further access, but it should also work for index-based operations (currentIndex() and setCurrentIndex(). If your data does not already have unique Qt::UserRole data, you can have TreeComboBox create it automatically by setting the autoData property to true.

Although it is usually simpler to build the data model first and then assign it to the combo box, there are also methods included to build the model directly, just as with QComboBox. In addition to the usual methods for adding items, there are new methods for adding parent items and specifying parents when adding sub-items.

It preserves keyboard navigation of items and expanding/collapsing parents. It tries to present a good user experience when the size of the popup selection box changes as ites are expanded/collapsed.

Unfortunately QComboBox is not easy to subclass or modify since most of the class is private. This is a reasonable attempt, and is a bit similar to TreeViewComboBox used in QtCreator, but geared towards much more general use.

Definition at line 92 of file TreeComboBox.h.

Constructor & Destructor Documentation

◆ TreeComboBox()

TreeComboBox::TreeComboBox ( QWidget parent = Q_NULLPTR)
explicit

Definition at line 109 of file TreeComboBox.cpp.

Property Documentation

◆ autoData

bool TreeComboBox::autoData
readwrite

Definition at line 95 of file TreeComboBox.h.

Member Function Documentation

◆ addItem() [1/4]

QModelIndex TreeComboBox::addItem ( const QString text,
const QModelIndex parentIndex,
const QVariant userData = QVariant() 
)
inline

Definition at line 152 of file TreeComboBox.h.

◆ addItem() [2/4]

QModelIndex TreeComboBox::addItem ( const QIcon icon,
const QString text,
const QModelIndex parentIndex,
const QVariant userData = QVariant() 
)
inline

Definition at line 154 of file TreeComboBox.h.

◆ addItem() [3/4]

void TreeComboBox::addItem ( const QString text,
const QVariant userData = QVariant() 
)
inline

Definition at line 161 of file TreeComboBox.h.

◆ addItem() [4/4]

void TreeComboBox::addItem ( const QIcon icon,
const QString text,
const QVariant userData = QVariant() 
)
inline

Definition at line 162 of file TreeComboBox.h.

◆ addItems() [1/2]

void TreeComboBox::addItems ( const QStringList texts,
const QModelIndex parentIndex 
)
inline

Definition at line 156 of file TreeComboBox.h.

◆ addItems() [2/2]

void TreeComboBox::addItems ( const QStringList texts)
inline

Definition at line 164 of file TreeComboBox.h.

◆ addParentItem() [1/2]

QModelIndex TreeComboBox::addParentItem ( const QString text,
const bool  selectable = false,
const QModelIndex parentIndex = QModelIndex(),
const QVariant userData = QVariant() 
)
inline

Definition at line 177 of file TreeComboBox.h.

◆ addParentItem() [2/2]

QModelIndex TreeComboBox::addParentItem ( const QIcon icon,
const QString text,
const bool  selectable = false,
const QModelIndex parentIndex = QModelIndex(),
const QVariant userData = QVariant() 
)
inline

Definition at line 179 of file TreeComboBox.h.

◆ adjustPopupHeight

void TreeComboBox::adjustPopupHeight ( )
protectedslot

Resize visible popup height when items are expanded/collapsed in the tree view.

Definition at line 620 of file TreeComboBox.cpp.

◆ adjustPopupWidth

void TreeComboBox::adjustPopupWidth ( )
protectedslot

Make sure tree view has a reasonable width.

Definition at line 608 of file TreeComboBox.cpp.

◆ autoData()

bool TreeComboBox::autoData ( ) const
inline

Definition at line 105 of file TreeComboBox.h.

◆ buildMap

int TreeComboBox::buildMap ( QModelIndex  parent = QModelIndex(),
int  row = 0 
)
protectedslot

Emitted along with currentIndexChanged() signals and if item has valid Qt::UserRole data.

We keep a mapping of original tree model data to the "flat" reprenstation which QComboBox understands. This allows eg. setCurrentIndex(int) and findData() to work as normal. We exclude any non-selectable items.

Definition at line 534 of file TreeComboBox.cpp.

◆ clear

void TreeComboBox::clear ( )
slot

Like QComboBox::clear() but does NOT remove any items from the current data model.

Instead, a new, blank, model is created.

Definition at line 240 of file TreeComboBox.cpp.

◆ currentData()

QVariant TreeComboBox::currentData ( int  role = Qt::UserRole) const

Reimplemented from superclass.

Reimplemented from QComboBox::currentData()

Definition at line 305 of file TreeComboBox.cpp.

◆ currentDataChanged

void TreeComboBox::currentDataChanged ( const QVariant data)
signal

◆ currentIndex()

int TreeComboBox::currentIndex ( ) const

Reimplemented from superclass.

Reimplemented from QComboBox::currentIndex()

Definition at line 245 of file TreeComboBox.cpp.

◆ currentModelIndexChanged

void TreeComboBox::currentModelIndexChanged ( const QModelIndex index)
signal

◆ ensureCurrentExpanded

void TreeComboBox::ensureCurrentExpanded ( )
protectedslot

Called before showing popup to make sure the initial view size is correct.

Definition at line 589 of file TreeComboBox.cpp.

◆ eventFilter()

bool TreeComboBox::eventFilter ( QObject object,
QEvent event 
)
overridevirtual

Reimplemented from superclass.

Reimplemented from QComboBoxPrivateContainer::eventFilter()

Reimplemented from QObject.

Definition at line 464 of file TreeComboBox.cpp.

◆ findData()

int TreeComboBox::findData ( const QVariant data,
int  role = Qt::UserRole,
Qt::MatchFlags  flags = Qt::MatchFlags(Qt::MatchExactly | Qt::MatchCaseSensitive) 
) const

Reimplemented from superclass.

Reimplemented from QComboBox::findData()

Definition at line 335 of file TreeComboBox.cpp.

◆ findText()

int TreeComboBox::findText ( const QString text,
Qt::MatchFlags  flags = Qt::MatchFlags(Qt::MatchExactly | Qt::MatchCaseSensitive) 
) const
inline

Definition at line 125 of file TreeComboBox.h.

◆ hidePopup()

void TreeComboBox::hidePopup ( )
overridevirtual

Reimplemented from superclass.

Reimplemented from QComboBox.

Definition at line 526 of file TreeComboBox.cpp.

◆ indexAbove()

QModelIndex TreeComboBox::indexAbove ( QModelIndex  index)
protected

Find first valid item index which if before given index.

Definition at line 348 of file TreeComboBox.cpp.

◆ indexBelow()

QModelIndex TreeComboBox::indexBelow ( QModelIndex  index)
protected

Find first valid item index which if after given index.

Definition at line 360 of file TreeComboBox.cpp.

◆ insertItem() [1/4]

QModelIndex TreeComboBox::insertItem ( int  index,
const QMap< int, QVariant > &  values = QMap<int, QVariant>(),
const QModelIndex parentIndex = QModelIndex(),
const bool  reload = true 
)

Insert an item at given index (row), with optional data values, under parent item indicated by parentIndex.

Parameters
indexRow number at which to put item.
valuesOptional map of data role to value pairs to add to the item's data().
parentIndexIf not specified, current view rootIndex is used.
reloadUsed to indicate that this is the last insert in a series. When false, item model signals are blocked during data changes.
Returns
Model index of newly inserted item. May be invalid index if insert failed.

Definition at line 173 of file TreeComboBox.cpp.

◆ insertItem() [2/4]

QModelIndex TreeComboBox::insertItem ( int  index,
const QIcon icon,
const QString text,
const QModelIndex parentIndex,
const QVariant userData = QVariant(),
const bool  reload = true 
)

Like QComboBox::insertItem but adds ability to specify a parent item.

index indicates row number in parent.

Parameters
indexRow number at which to put item.
parentIndexIf not specified, current view rootIndex is used.
reloadUsed to indicate that this is the last insert in a series. When false, item model signals are blocked during data changes.
Returns
Model index of newly inserted item. May be invalid index if insert failed.
See also
insertItem(int, QMap<int, QVariant>, QModelIndex, bool)

Definition at line 209 of file TreeComboBox.cpp.

◆ insertItem() [3/4]

void TreeComboBox::insertItem ( int  index,
const QIcon icon,
const QString text,
const QVariant userData = QVariant() 
)
inline

Definition at line 159 of file TreeComboBox.h.

◆ insertItem() [4/4]

void TreeComboBox::insertItem ( int  index,
const QString text,
const QVariant userData = QVariant() 
)
inline

Definition at line 163 of file TreeComboBox.h.

◆ insertItems() [1/2]

void TreeComboBox::insertItems ( int  index,
const QStringList texts,
const QModelIndex parentIndex 
)

Inserts multiple items from a list as children of parentIndex.

See also
insertItems()

Definition at line 224 of file TreeComboBox.cpp.

◆ insertItems() [2/2]

void TreeComboBox::insertItems ( int  index,
const QStringList texts 
)
inline

Definition at line 165 of file TreeComboBox.h.

◆ insertParentItem()

QModelIndex TreeComboBox::insertParentItem ( int  index,
const QIcon icon,
const QString text,
const bool  selectable = false,
const QModelIndex parentIndex = QModelIndex(),
const QVariant userData = QVariant() 
)

Inserts an item and marks is as a "parent" type item.

By default the parent item is only used to group other items and cannot be selected.

Parameters
indexRow number at which to put item.
parentIndexIf not specified, current view rootIndex is used.
Returns
Model index of newly inserted item. This index can then be used to add children items. May be invalid index if insert failed.
See also
insertItem(), TreeComboItemDelegate::setParent()

Definition at line 230 of file TreeComboBox.cpp.

◆ itemData()

QVariant TreeComboBox::itemData ( int  index,
int  role = Qt::UserRole 
) const

Reimplemented from superclass.

Reimplemented from QComboBox::itemData()

Definition at line 310 of file TreeComboBox.cpp.

◆ itemIcon()

QIcon TreeComboBox::itemIcon ( int  index) const

Reimplemented from superclass.

Reimplemented from QComboBox::itemIcon()

Definition at line 318 of file TreeComboBox.cpp.

◆ itemText()

QString TreeComboBox::itemText ( int  index) const
inline

Definition at line 115 of file TreeComboBox.h.

◆ keyboardSearchString

void TreeComboBox::keyboardSearchString ( const QString text)
slot

Reimplemented from superclass.

Reimplemented from QComboBoxPrivate::keyboardSearchString()

Definition at line 380 of file TreeComboBox.cpp.

◆ keyPressEvent()

void TreeComboBox::keyPressEvent ( QKeyEvent event)
overridevirtual

Reimplemented from superclass.

Reimplemented from QComboBox::keyPressEvent()

Reimplemented from QComboBox.

Definition at line 407 of file TreeComboBox.cpp.

◆ lastIndex()

QModelIndex TreeComboBox::lastIndex ( const QModelIndex index)
protected

Find last (greatest) valid item index in a set (eg.

under a parent), starting at index.

Definition at line 370 of file TreeComboBox.cpp.

◆ reloadModel

void TreeComboBox::reloadModel ( )
protectedslot

Definition at line 554 of file TreeComboBox.cpp.

◆ setAutoData

void TreeComboBox::setAutoData ( bool  enable)
inlineslot

Definition at line 209 of file TreeComboBox.h.

◆ setCurrentData

int TreeComboBox::setCurrentData ( const QVariant data,
const int  defaultIdx = -1,
int  role = Qt::UserRole,
Qt::MatchFlags  flags = Qt::MatchFlags(Qt::MatchExactly | Qt::MatchCaseSensitive) 
)
slot

This is a shortcut to using setCurrentIndex(findData()), and also returns the new index (like findData() would).

If data was not found, will set current item to defaultIdx (defalut is -1, an invalid index).

Definition at line 296 of file TreeComboBox.cpp.

◆ setCurrentIndex [1/2]

void TreeComboBox::setCurrentIndex ( int  index)
slot

Reimplemented from superclass.

Reimplemented from QComboBox::setCurrentIndex()

Definition at line 253 of file TreeComboBox.cpp.

◆ setCurrentIndex [2/2]

void TreeComboBox::setCurrentIndex ( const QModelIndex index)
slot

Sets currently selected item to index using data model indices.

This is ultimately called by all other methods which may set the current item.

Definition at line 258 of file TreeComboBox.cpp.

◆ setCurrentText

void TreeComboBox::setCurrentText ( const QString text)
inlineslot

Definition at line 200 of file TreeComboBox.h.

◆ setItemData() [1/2]

void TreeComboBox::setItemData ( const QModelIndex index,
const QVariant value,
int  role = Qt::UserRole 
)

Sets the data role for the item at index to the specified value.

Convenience function vs. accessing the data model directly.

Definition at line 329 of file TreeComboBox.cpp.

◆ setItemData() [2/2]

void TreeComboBox::setItemData ( int  index,
const QVariant value,
int  role = Qt::UserRole 
)
inline

Definition at line 119 of file TreeComboBox.h.

◆ setItemIcon()

void TreeComboBox::setItemIcon ( int  index,
const QIcon icon 
)
inline

Definition at line 121 of file TreeComboBox.h.

◆ setItemText()

void TreeComboBox::setItemText ( int  index,
const QString text 
)
inline

Definition at line 120 of file TreeComboBox.h.

◆ setModel()

void TreeComboBox::setModel ( QAbstractItemModel model)

Reimplemented from superclass.

Reimplemented from QComboBox::setModel()

Definition at line 157 of file TreeComboBox.cpp.

◆ setView()

void TreeComboBox::setView ( QAbstractItemView itemView = Q_NULLPTR)

Like QComboBox::setView but only accepts QTreeView (and derived) view classes.

Definition at line 122 of file TreeComboBox.cpp.

◆ showPopup()

void TreeComboBox::showPopup ( )
overridevirtual

Reimplemented from superclass.

Reimplemented from QComboBox.

Definition at line 520 of file TreeComboBox.cpp.

◆ usePopup()

bool TreeComboBox::usePopup ( QStyleOptionComboBox option = NULL)
protected

Return true if style options are set to use a "popup" presentation style (typ.

true on Linux/OS X if non-editable combo)

Definition at line 599 of file TreeComboBox.cpp.

◆ view()

QTreeView* TreeComboBox::view ( ) const
inline

Definition at line 104 of file TreeComboBox.h.

◆ wheelEvent()

void TreeComboBox::wheelEvent ( QWheelEvent event)
overridevirtual

Reimplemented from superclass.

Reimplemented from QComboBox::wheelEvent()

Reimplemented from QComboBox.

Definition at line 391 of file TreeComboBox.cpp.

Member Data Documentation

◆ m_autoData

bool TreeComboBox::m_autoData
protected

Definition at line 244 of file TreeComboBox.h.

◆ m_currentIndex

QPersistentModelIndex TreeComboBox::m_currentIndex
protected

Definition at line 242 of file TreeComboBox.h.

◆ m_indexMap

QMap<int, QPersistentModelIndex> TreeComboBox::m_indexMap
protected

Definition at line 241 of file TreeComboBox.h.

◆ m_nextDataId

int TreeComboBox::m_nextDataId
protected

Definition at line 243 of file TreeComboBox.h.

◆ m_rowMap

QMap<QPersistentModelIndex, int> TreeComboBox::m_rowMap
protected

Definition at line 240 of file TreeComboBox.h.

◆ m_skipNextHide

bool TreeComboBox::m_skipNextHide
protected

Definition at line 245 of file TreeComboBox.h.

◆ m_view

QTreeView* TreeComboBox::m_view
protected

Definition at line 239 of file TreeComboBox.h.