qabstractitemview.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:13k
源码类别:

系统编程

开发平台:

Unix_Linux

  1. /****************************************************************************
  2. **
  3. ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
  4. ** Contact: Qt Software Information (qt-info@nokia.com)
  5. **
  6. ** This file is part of the QtGui module of the Qt Toolkit.
  7. **
  8. ** Commercial Usage
  9. ** Licensees holding valid Qt Commercial licenses may use this file in
  10. ** accordance with the Qt Commercial License Agreement provided with the
  11. ** Software or, alternatively, in accordance with the terms contained in
  12. ** a written agreement between you and Nokia.
  13. **
  14. **
  15. ** GNU General Public License Usage
  16. ** Alternatively, this file may be used under the terms of the GNU
  17. ** General Public License versions 2.0 or 3.0 as published by the Free
  18. ** Software Foundation and appearing in the file LICENSE.GPL included in
  19. ** the packaging of this file.  Please review the following information
  20. ** to ensure GNU General Public Licensing requirements will be met:
  21. ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
  22. ** http://www.gnu.org/copyleft/gpl.html.  In addition, as a special
  23. ** exception, Nokia gives you certain additional rights. These rights
  24. ** are described in the Nokia Qt GPL Exception version 1.3, included in
  25. ** the file GPL_EXCEPTION.txt in this package.
  26. **
  27. ** Qt for Windows(R) Licensees
  28. ** As a special exception, Nokia, as the sole copyright holder for Qt
  29. ** Designer, grants users of the Qt/Eclipse Integration plug-in the
  30. ** right for the Qt/Eclipse Integration to link to functionality
  31. ** provided by Qt Designer and its related libraries.
  32. **
  33. ** If you are unsure which license is appropriate for your use, please
  34. ** contact the sales department at qt-sales@nokia.com.
  35. **
  36. ****************************************************************************/
  37. #ifndef QABSTRACTITEMVIEW_H
  38. #define QABSTRACTITEMVIEW_H
  39. #include <QtGui/qabstractscrollarea.h>
  40. #include <QtCore/qabstractitemmodel.h>
  41. #include <QtGui/qitemselectionmodel.h>
  42. #include <QtGui/qabstractitemdelegate.h>
  43. QT_BEGIN_HEADER
  44. QT_BEGIN_NAMESPACE
  45. QT_MODULE(Gui)
  46. #ifndef QT_NO_ITEMVIEWS
  47. class QMenu;
  48. class QDrag;
  49. class QEvent;
  50. class QAbstractItemViewPrivate;
  51. class Q_GUI_EXPORT QAbstractItemView : public QAbstractScrollArea
  52. {
  53.     Q_OBJECT
  54.     Q_ENUMS(SelectionMode SelectionBehavior ScrollHint ScrollMode DragDropMode)
  55.     Q_FLAGS(EditTriggers)
  56.     Q_PROPERTY(bool autoScroll READ hasAutoScroll WRITE setAutoScroll)
  57.     Q_PROPERTY(int autoScrollMargin READ autoScrollMargin WRITE setAutoScrollMargin)
  58.     Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers)
  59.     Q_PROPERTY(bool tabKeyNavigation READ tabKeyNavigation WRITE setTabKeyNavigation)
  60. #ifndef QT_NO_DRAGANDDROP
  61.     Q_PROPERTY(bool showDropIndicator READ showDropIndicator WRITE setDropIndicatorShown)
  62.     Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled)
  63.     Q_PROPERTY(bool dragDropOverwriteMode READ dragDropOverwriteMode WRITE setDragDropOverwriteMode)
  64.     Q_PROPERTY(DragDropMode dragDropMode READ dragDropMode WRITE setDragDropMode)
  65. #endif
  66.     Q_PROPERTY(bool alternatingRowColors READ alternatingRowColors WRITE setAlternatingRowColors)
  67.     Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
  68.     Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior WRITE setSelectionBehavior)
  69.     Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
  70.     Q_PROPERTY(Qt::TextElideMode textElideMode READ textElideMode WRITE setTextElideMode)
  71.     Q_PROPERTY(ScrollMode verticalScrollMode READ verticalScrollMode WRITE setVerticalScrollMode)
  72.     Q_PROPERTY(ScrollMode horizontalScrollMode READ horizontalScrollMode WRITE setHorizontalScrollMode)
  73. public:
  74.     enum SelectionMode {
  75.         NoSelection,
  76.         SingleSelection,
  77.         MultiSelection,
  78.         ExtendedSelection,
  79.         ContiguousSelection
  80.     };
  81.     enum SelectionBehavior {
  82.         SelectItems,
  83.         SelectRows,
  84.         SelectColumns
  85.     };
  86.     enum ScrollHint {
  87.         EnsureVisible,
  88.         PositionAtTop,
  89.         PositionAtBottom,
  90.         PositionAtCenter
  91.     };
  92.     enum EditTrigger {
  93.         NoEditTriggers = 0,
  94.         CurrentChanged = 1,
  95.         DoubleClicked = 2,
  96.         SelectedClicked = 4,
  97.         EditKeyPressed = 8,
  98.         AnyKeyPressed = 16,
  99.         AllEditTriggers = 31
  100.     };
  101.     Q_DECLARE_FLAGS(EditTriggers, EditTrigger)
  102.     enum ScrollMode {
  103.         ScrollPerItem,
  104.         ScrollPerPixel
  105.     };
  106.     explicit QAbstractItemView(QWidget *parent = 0);
  107.     ~QAbstractItemView();
  108.     virtual void setModel(QAbstractItemModel *model);
  109.     QAbstractItemModel *model() const;
  110.     virtual void setSelectionModel(QItemSelectionModel *selectionModel);
  111.     QItemSelectionModel *selectionModel() const;
  112.     void setItemDelegate(QAbstractItemDelegate *delegate);
  113.     QAbstractItemDelegate *itemDelegate() const;
  114.     void setSelectionMode(QAbstractItemView::SelectionMode mode);
  115.     QAbstractItemView::SelectionMode selectionMode() const;
  116.     void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior);
  117.     QAbstractItemView::SelectionBehavior selectionBehavior() const;
  118.     QModelIndex currentIndex() const;
  119.     QModelIndex rootIndex() const;
  120.     void setEditTriggers(EditTriggers triggers);
  121.     EditTriggers editTriggers() const;
  122.     void setVerticalScrollMode(ScrollMode mode);
  123.     ScrollMode verticalScrollMode() const;
  124.     void setHorizontalScrollMode(ScrollMode mode);
  125.     ScrollMode horizontalScrollMode() const;
  126.     void setAutoScroll(bool enable);
  127.     bool hasAutoScroll() const;
  128.     void setAutoScrollMargin(int margin);
  129.     int autoScrollMargin() const;
  130.     void setTabKeyNavigation(bool enable);
  131.     bool tabKeyNavigation() const;
  132. #ifndef QT_NO_DRAGANDDROP
  133.     void setDropIndicatorShown(bool enable);
  134.     bool showDropIndicator() const;
  135.     void setDragEnabled(bool enable);
  136.     bool dragEnabled() const;
  137.     void setDragDropOverwriteMode(bool overwrite);
  138.     bool dragDropOverwriteMode() const;
  139.     enum DragDropMode {
  140.         NoDragDrop,
  141.         DragOnly,
  142.         DropOnly,
  143.         DragDrop,
  144.         InternalMove
  145.     };
  146.     void setDragDropMode(DragDropMode behavior);
  147.     DragDropMode dragDropMode() const;
  148. #endif
  149.     void setAlternatingRowColors(bool enable);
  150.     bool alternatingRowColors() const;
  151.     void setIconSize(const QSize &size);
  152.     QSize iconSize() const;
  153.     void setTextElideMode(Qt::TextElideMode mode);
  154.     Qt::TextElideMode textElideMode() const;
  155.     virtual void keyboardSearch(const QString &search);
  156.     virtual QRect visualRect(const QModelIndex &index) const = 0;
  157.     virtual void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) = 0;
  158.     virtual QModelIndex indexAt(const QPoint &point) const = 0;
  159.     QSize sizeHintForIndex(const QModelIndex &index) const;
  160.     virtual int sizeHintForRow(int row) const;
  161.     virtual int sizeHintForColumn(int column) const;
  162.     void openPersistentEditor(const QModelIndex &index);
  163.     void closePersistentEditor(const QModelIndex &index);
  164.     void setIndexWidget(const QModelIndex &index, QWidget *widget);
  165.     QWidget *indexWidget(const QModelIndex &index) const;
  166.     void setItemDelegateForRow(int row, QAbstractItemDelegate *delegate);
  167.     QAbstractItemDelegate *itemDelegateForRow(int row) const;
  168.     void setItemDelegateForColumn(int column, QAbstractItemDelegate *delegate);
  169.     QAbstractItemDelegate *itemDelegateForColumn(int column) const;
  170.     QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const;
  171.     virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
  172. #ifdef Q_NO_USING_KEYWORD
  173.     inline void update() { QAbstractScrollArea::update(); }
  174. #else
  175.     using QAbstractScrollArea::update;
  176. #endif
  177.     
  178. public Q_SLOTS:
  179.     virtual void reset();
  180.     virtual void setRootIndex(const QModelIndex &index);
  181.     virtual void doItemsLayout();
  182.     virtual void selectAll();
  183.     void edit(const QModelIndex &index);
  184.     void clearSelection();
  185.     void setCurrentIndex(const QModelIndex &index);
  186.     void scrollToTop();
  187.     void scrollToBottom();
  188.     void update(const QModelIndex &index);
  189. protected Q_SLOTS:
  190.     virtual void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
  191.     virtual void rowsInserted(const QModelIndex &parent, int start, int end);
  192.     virtual void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
  193.     virtual void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
  194.     virtual void currentChanged(const QModelIndex &current, const QModelIndex &previous);
  195.     virtual void updateEditorData();
  196.     virtual void updateEditorGeometries();
  197.     virtual void updateGeometries();
  198.     virtual void verticalScrollbarAction(int action);
  199.     virtual void horizontalScrollbarAction(int action);
  200.     virtual void verticalScrollbarValueChanged(int value);
  201.     virtual void horizontalScrollbarValueChanged(int value);
  202.     virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint);
  203.     virtual void commitData(QWidget *editor);
  204.     virtual void editorDestroyed(QObject *editor);
  205. Q_SIGNALS:
  206.     void pressed(const QModelIndex &index);
  207.     void clicked(const QModelIndex &index);
  208.     void doubleClicked(const QModelIndex &index);
  209.     void activated(const QModelIndex &index);
  210.     void entered(const QModelIndex &index);
  211.     void viewportEntered();
  212. protected:
  213.     QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = 0);
  214.     void setHorizontalStepsPerItem(int steps);
  215.     int horizontalStepsPerItem() const;
  216.     void setVerticalStepsPerItem(int steps);
  217.     int verticalStepsPerItem() const;
  218.     enum CursorAction { MoveUp, MoveDown, MoveLeft, MoveRight,
  219.                         MoveHome, MoveEnd, MovePageUp, MovePageDown,
  220.                         MoveNext, MovePrevious };
  221.     virtual QModelIndex moveCursor(CursorAction cursorAction,
  222.                                    Qt::KeyboardModifiers modifiers) = 0;
  223.     virtual int horizontalOffset() const = 0;
  224.     virtual int verticalOffset() const = 0;
  225.     virtual bool isIndexHidden(const QModelIndex &index) const = 0;
  226.     virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) = 0;
  227.     virtual QRegion visualRegionForSelection(const QItemSelection &selection) const = 0;
  228.     virtual QModelIndexList selectedIndexes() const;
  229.     virtual bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event);
  230.     virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index,
  231.                                                                  const QEvent *event = 0) const;
  232. #ifndef QT_NO_DRAGANDDROP
  233.     virtual void startDrag(Qt::DropActions supportedActions);
  234. #endif
  235.     virtual QStyleOptionViewItem viewOptions() const;
  236.     enum State {
  237.         NoState,
  238.         DraggingState,
  239.         DragSelectingState,
  240.         EditingState,
  241.         ExpandingState,
  242.         CollapsingState,
  243.         AnimatingState
  244.     };
  245.     State state() const;
  246.     void setState(State state);
  247.     void scheduleDelayedItemsLayout();
  248.     void executeDelayedItemsLayout();
  249.     void setDirtyRegion(const QRegion &region);
  250.     void scrollDirtyRegion(int dx, int dy);
  251.     QPoint dirtyRegionOffset() const;
  252.     void startAutoScroll();
  253.     void stopAutoScroll();
  254.     void doAutoScroll();
  255.     bool focusNextPrevChild(bool next);
  256.     bool event(QEvent *event);
  257.     bool viewportEvent(QEvent *event);
  258.     void mousePressEvent(QMouseEvent *event);
  259.     void mouseMoveEvent(QMouseEvent *event);
  260.     void mouseReleaseEvent(QMouseEvent *event);
  261.     void mouseDoubleClickEvent(QMouseEvent *event);
  262. #ifndef QT_NO_DRAGANDDROP
  263.     void dragEnterEvent(QDragEnterEvent *event);
  264.     void dragMoveEvent(QDragMoveEvent *event);
  265.     void dragLeaveEvent(QDragLeaveEvent *event);
  266.     void dropEvent(QDropEvent *event);
  267. #endif
  268.     void focusInEvent(QFocusEvent *event);
  269.     void focusOutEvent(QFocusEvent *event);
  270.     void keyPressEvent(QKeyEvent *event);
  271.     void resizeEvent(QResizeEvent *event);
  272.     void timerEvent(QTimerEvent *event);
  273.     void inputMethodEvent(QInputMethodEvent *event);
  274. #ifndef QT_NO_DRAGANDDROP
  275.     enum DropIndicatorPosition { OnItem, AboveItem, BelowItem, OnViewport };
  276.     DropIndicatorPosition dropIndicatorPosition() const;
  277. #endif
  278. private:
  279.     Q_DECLARE_PRIVATE(QAbstractItemView)
  280.     Q_DISABLE_COPY(QAbstractItemView)
  281.     Q_PRIVATE_SLOT(d_func(), void _q_columnsAboutToBeRemoved(const QModelIndex&, int, int))
  282.     Q_PRIVATE_SLOT(d_func(), void _q_columnsRemoved(const QModelIndex&, int, int))
  283.     Q_PRIVATE_SLOT(d_func(), void _q_rowsRemoved(const QModelIndex&, int, int))
  284.     Q_PRIVATE_SLOT(d_func(), void _q_modelDestroyed())
  285.     Q_PRIVATE_SLOT(d_func(), void _q_layoutChanged())
  286.     Q_PRIVATE_SLOT(d_func(), void _q_fetchMore())
  287.     friend class QTreeViewPrivate; // needed to compile with MSVC
  288.     friend class QAccessibleItemRow;
  289. };
  290. Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractItemView::EditTriggers)
  291. #endif // QT_NO_ITEMVIEWS
  292. QT_END_NAMESPACE
  293. QT_END_HEADER
  294. #endif // QABSTRACTITEMVIEW_H