File indexing completed on 2025-09-16 09:06:25
0001
0002
0003
0004 #ifndef QABSTRACTITEMVIEW_H
0005 #define QABSTRACTITEMVIEW_H
0006
0007 #include <QtWidgets/qtwidgetsglobal.h>
0008 #include <QtWidgets/qabstractscrollarea.h>
0009 #include <QtCore/qabstractitemmodel.h>
0010 #include <QtCore/qitemselectionmodel.h>
0011 #include <QtWidgets/qabstractitemdelegate.h>
0012
0013 class tst_QAbstractItemView;
0014 class tst_QTreeView;
0015
0016 QT_REQUIRE_CONFIG(itemviews);
0017
0018 QT_BEGIN_NAMESPACE
0019
0020 class QMenu;
0021 class QDrag;
0022 class QEvent;
0023 class QAbstractItemViewPrivate;
0024
0025 class Q_WIDGETS_EXPORT QAbstractItemView : public QAbstractScrollArea
0026 {
0027 Q_OBJECT
0028 Q_PROPERTY(bool autoScroll READ hasAutoScroll WRITE setAutoScroll)
0029 Q_PROPERTY(int autoScrollMargin READ autoScrollMargin WRITE setAutoScrollMargin)
0030 Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers)
0031 Q_PROPERTY(bool tabKeyNavigation READ tabKeyNavigation WRITE setTabKeyNavigation)
0032 #if QT_CONFIG(draganddrop)
0033 Q_PROPERTY(bool showDropIndicator READ showDropIndicator WRITE setDropIndicatorShown)
0034 Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled)
0035 Q_PROPERTY(bool dragDropOverwriteMode READ dragDropOverwriteMode WRITE setDragDropOverwriteMode)
0036 Q_PROPERTY(DragDropMode dragDropMode READ dragDropMode WRITE setDragDropMode)
0037 Q_PROPERTY(Qt::DropAction defaultDropAction READ defaultDropAction WRITE setDefaultDropAction)
0038 #endif
0039 Q_PROPERTY(bool alternatingRowColors READ alternatingRowColors WRITE setAlternatingRowColors)
0040 Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
0041 Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior
0042 WRITE setSelectionBehavior)
0043 Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged)
0044 Q_PROPERTY(Qt::TextElideMode textElideMode READ textElideMode WRITE setTextElideMode)
0045 Q_PROPERTY(ScrollMode verticalScrollMode READ verticalScrollMode WRITE setVerticalScrollMode
0046 RESET resetVerticalScrollMode)
0047 Q_PROPERTY(ScrollMode horizontalScrollMode READ horizontalScrollMode
0048 WRITE setHorizontalScrollMode RESET resetHorizontalScrollMode)
0049 Q_PROPERTY(int updateThreshold READ updateThreshold WRITE setUpdateThreshold)
0050
0051 public:
0052 enum SelectionMode {
0053 NoSelection,
0054 SingleSelection,
0055 MultiSelection,
0056 ExtendedSelection,
0057 ContiguousSelection
0058 };
0059 Q_ENUM(SelectionMode)
0060
0061 enum SelectionBehavior {
0062 SelectItems,
0063 SelectRows,
0064 SelectColumns
0065 };
0066 Q_ENUM(SelectionBehavior)
0067
0068 enum ScrollHint {
0069 EnsureVisible,
0070 PositionAtTop,
0071 PositionAtBottom,
0072 PositionAtCenter
0073 };
0074 Q_ENUM(ScrollHint)
0075
0076 enum EditTrigger {
0077 NoEditTriggers = 0,
0078 CurrentChanged = 1,
0079 DoubleClicked = 2,
0080 SelectedClicked = 4,
0081 EditKeyPressed = 8,
0082 AnyKeyPressed = 16,
0083 AllEditTriggers = 31
0084 };
0085
0086 Q_DECLARE_FLAGS(EditTriggers, EditTrigger)
0087 Q_FLAG(EditTriggers)
0088
0089 enum ScrollMode {
0090 ScrollPerItem,
0091 ScrollPerPixel
0092 };
0093 Q_ENUM(ScrollMode)
0094
0095 explicit QAbstractItemView(QWidget *parent = nullptr);
0096 ~QAbstractItemView();
0097
0098 virtual void setModel(QAbstractItemModel *model);
0099 QAbstractItemModel *model() const;
0100
0101 virtual void setSelectionModel(QItemSelectionModel *selectionModel);
0102 QItemSelectionModel *selectionModel() const;
0103
0104 void setItemDelegate(QAbstractItemDelegate *delegate);
0105 QAbstractItemDelegate *itemDelegate() const;
0106
0107 void setSelectionMode(QAbstractItemView::SelectionMode mode);
0108 QAbstractItemView::SelectionMode selectionMode() const;
0109
0110 void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior);
0111 QAbstractItemView::SelectionBehavior selectionBehavior() const;
0112
0113 QModelIndex currentIndex() const;
0114 QModelIndex rootIndex() const;
0115
0116 void setEditTriggers(EditTriggers triggers);
0117 EditTriggers editTriggers() const;
0118
0119 void setVerticalScrollMode(ScrollMode mode);
0120 ScrollMode verticalScrollMode() const;
0121 void resetVerticalScrollMode();
0122
0123 void setHorizontalScrollMode(ScrollMode mode);
0124 ScrollMode horizontalScrollMode() const;
0125 void resetHorizontalScrollMode();
0126
0127 void setAutoScroll(bool enable);
0128 bool hasAutoScroll() const;
0129
0130 void setAutoScrollMargin(int margin);
0131 int autoScrollMargin() const;
0132
0133 void setTabKeyNavigation(bool enable);
0134 bool tabKeyNavigation() const;
0135
0136 #if QT_CONFIG(draganddrop)
0137 void setDropIndicatorShown(bool enable);
0138 bool showDropIndicator() const;
0139
0140 void setDragEnabled(bool enable);
0141 bool dragEnabled() const;
0142
0143 void setDragDropOverwriteMode(bool overwrite);
0144 bool dragDropOverwriteMode() const;
0145
0146 enum DragDropMode {
0147 NoDragDrop,
0148 DragOnly,
0149 DropOnly,
0150 DragDrop,
0151 InternalMove
0152 };
0153 Q_ENUM(DragDropMode)
0154
0155 void setDragDropMode(DragDropMode behavior);
0156 DragDropMode dragDropMode() const;
0157
0158 void setDefaultDropAction(Qt::DropAction dropAction);
0159 Qt::DropAction defaultDropAction() const;
0160 #endif
0161
0162 void setAlternatingRowColors(bool enable);
0163 bool alternatingRowColors() const;
0164
0165 void setIconSize(const QSize &size);
0166 QSize iconSize() const;
0167
0168 void setTextElideMode(Qt::TextElideMode mode);
0169 Qt::TextElideMode textElideMode() const;
0170
0171 virtual void keyboardSearch(const QString &search);
0172
0173 virtual QRect visualRect(const QModelIndex &index) const = 0;
0174 virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) = 0;
0175 virtual QModelIndex indexAt(const QPoint &point) const = 0;
0176
0177 QSize sizeHintForIndex(const QModelIndex &index) const;
0178 virtual int sizeHintForRow(int row) const;
0179 virtual int sizeHintForColumn(int column) const;
0180
0181 int updateThreshold() const;
0182 void setUpdateThreshold(int threshold);
0183
0184 void openPersistentEditor(const QModelIndex &index);
0185 void closePersistentEditor(const QModelIndex &index);
0186 bool isPersistentEditorOpen(const QModelIndex &index) const;
0187
0188 void setIndexWidget(const QModelIndex &index, QWidget *widget);
0189 QWidget *indexWidget(const QModelIndex &index) const;
0190
0191 void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate);
0192 QAbstractItemDelegate *itemDelegateForRow(int row) const;
0193
0194 void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate);
0195 QAbstractItemDelegate *itemDelegateForColumn(int column) const;
0196
0197 #if QT_DEPRECATED_SINCE(6, 0)
0198 QT_DEPRECATED_VERSION_X_6_0("Use itemDelegateForIndex instead")
0199 QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const
0200 { return itemDelegateForIndex(index); }
0201 #endif
0202 virtual QAbstractItemDelegate *itemDelegateForIndex(const QModelIndex &index) const;
0203
0204 virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const override;
0205
0206 using QAbstractScrollArea::update;
0207
0208 public Q_SLOTS:
0209 virtual void reset();
0210 virtual void setRootIndex(const QModelIndex &index);
0211 virtual void doItemsLayout();
0212 virtual void selectAll();
0213 void edit(const QModelIndex &index);
0214 void clearSelection();
0215 void setCurrentIndex(const QModelIndex &index);
0216 void scrollToTop();
0217 void scrollToBottom();
0218 void update(const QModelIndex &index);
0219
0220 protected Q_SLOTS:
0221 virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
0222 const QList<int> &roles = QList<int>());
0223 virtual void rowsInserted(const QModelIndex &parent, int start, int end);
0224 virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
0225 virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
0226 virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &previous);
0227 virtual void updateEditorData();
0228 virtual void updateEditorGeometries();
0229 virtual void updateGeometries();
0230 virtual void verticalScrollbarAction(int action);
0231 virtual void horizontalScrollbarAction(int action);
0232 virtual void verticalScrollbarValueChanged(int value);
0233 virtual void horizontalScrollbarValueChanged(int value);
0234 virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint);
0235 virtual void commitData(QWidget *editor);
0236 virtual void editorDestroyed(QObject *editor);
0237
0238 Q_SIGNALS:
0239 void pressed(const QModelIndex &index);
0240 void clicked(const QModelIndex &index);
0241 void doubleClicked(const QModelIndex &index);
0242
0243 void activated(const QModelIndex &index);
0244 void entered(const QModelIndex &index);
0245 void viewportEntered();
0246
0247 void iconSizeChanged(const QSize &size);
0248
0249 protected:
0250 QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = nullptr);
0251
0252 enum CursorAction { MoveUp, MoveDown, MoveLeft, MoveRight,
0253 MoveHome, MoveEnd, MovePageUp, MovePageDown,
0254 MoveNext, MovePrevious };
0255 virtual QModelIndex moveCursor(CursorAction cursorAction,
0256 Qt::KeyboardModifiers modifiers) = 0;
0257
0258 virtual int horizontalOffset() const = 0;
0259 virtual int verticalOffset() const = 0;
0260
0261 virtual bool isIndexHidden(const QModelIndex &index) const = 0;
0262
0263 virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) = 0;
0264 virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0;
0265 virtual QModelIndexList selectedIndexes() const;
0266
0267 virtual bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event);
0268
0269 virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index,
0270 const QEvent *event = nullptr) const;
0271
0272 #if QT_CONFIG(draganddrop)
0273 virtual void startDrag(Qt::DropActions supportedActions);
0274 #endif
0275
0276 virtual void initViewItemOption(QStyleOptionViewItem *option) const;
0277
0278 enum State {
0279 NoState,
0280 DraggingState,
0281 DragSelectingState,
0282 EditingState,
0283 ExpandingState,
0284 CollapsingState,
0285 AnimatingState
0286 };
0287
0288 State state() const;
0289 void setState(State state);
0290
0291 void scheduleDelayedItemsLayout();
0292 void executeDelayedItemsLayout();
0293
0294 void setDirtyRegion(const QRegion ®ion);
0295 void scrollDirtyRegion(int dx, int dy);
0296 QPoint dirtyRegionOffset() const;
0297
0298 void startAutoScroll();
0299 void stopAutoScroll();
0300 void doAutoScroll();
0301
0302 bool focusNextPrevChild(bool next) override;
0303 bool event(QEvent *event) override;
0304 bool viewportEvent(QEvent *event) override;
0305 void mousePressEvent(QMouseEvent *event) override;
0306 void mouseMoveEvent(QMouseEvent *event) override;
0307 void mouseReleaseEvent(QMouseEvent *event) override;
0308 void mouseDoubleClickEvent(QMouseEvent *event) override;
0309 #if QT_CONFIG(draganddrop)
0310 void dragEnterEvent(QDragEnterEvent *event) override;
0311 void dragMoveEvent(QDragMoveEvent *event) override;
0312 void dragLeaveEvent(QDragLeaveEvent *event) override;
0313 void dropEvent(QDropEvent *event) override;
0314 #endif
0315 void focusInEvent(QFocusEvent *event) override;
0316 void focusOutEvent(QFocusEvent *event) override;
0317 void keyPressEvent(QKeyEvent *event) override;
0318 void resizeEvent(QResizeEvent *event) override;
0319 void timerEvent(QTimerEvent *event) override;
0320 void inputMethodEvent(QInputMethodEvent *event) override;
0321 bool eventFilter(QObject *object, QEvent *event) override;
0322
0323 #if QT_CONFIG(draganddrop)
0324 enum DropIndicatorPosition { OnItem, AboveItem, BelowItem, OnViewport };
0325 DropIndicatorPosition dropIndicatorPosition() const;
0326 #endif
0327
0328 QSize viewportSizeHint() const override;
0329
0330 private:
0331 Q_DECLARE_PRIVATE(QAbstractItemView)
0332 Q_DISABLE_COPY(QAbstractItemView)
0333
0334 friend class ::tst_QAbstractItemView;
0335 friend class ::tst_QTreeView;
0336 friend class QTreeViewPrivate;
0337 friend class QListModeViewBase;
0338 friend class QListViewPrivate;
0339 friend class QAbstractSlider;
0340 friend class QComboBoxPrivate;
0341 };
0342
0343 Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractItemView::EditTriggers)
0344
0345 QT_END_NAMESPACE
0346
0347 #endif