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

系统编程

开发平台:

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 QTREEWIDGET_H
  38. #define QTREEWIDGET_H
  39. #include <QtGui/qtreeview.h>
  40. #include <QtGui/qtreewidgetitemiterator.h>
  41. #include <QtCore/qvariant.h>
  42. #include <QtCore/qvector.h>
  43. QT_BEGIN_HEADER
  44. QT_BEGIN_NAMESPACE
  45. QT_MODULE(Gui)
  46. #ifndef QT_NO_TREEWIDGET
  47. class QTreeWidget;
  48. class QTreeModel;
  49. class QWidgetItemData;
  50. class QTreeWidgetItemPrivate;
  51. class Q_GUI_EXPORT QTreeWidgetItem
  52. {
  53.     friend class QTreeModel;
  54.     friend class QTreeWidget;
  55.     friend class QTreeWidgetPrivate;
  56.     friend class QTreeWidgetItemIterator;
  57.     friend class QTreeWidgetItemPrivate;
  58. public:
  59.     enum ItemType { Type = 0, UserType = 1000 };
  60.     QTreeWidgetItem(int type = Type);
  61.     QTreeWidgetItem(const QStringList &strings, int type = Type);
  62.     explicit QTreeWidgetItem(QTreeWidget *view, int type = Type);
  63.     QTreeWidgetItem(QTreeWidget *view, const QStringList &strings, int type = Type);
  64.     QTreeWidgetItem(QTreeWidget *view, QTreeWidgetItem *after, int type = Type);
  65.     explicit QTreeWidgetItem(QTreeWidgetItem *parent, int type = Type);
  66.     QTreeWidgetItem(QTreeWidgetItem *parent, const QStringList &strings, int type = Type);
  67.     QTreeWidgetItem(QTreeWidgetItem *parent, QTreeWidgetItem *after, int type = Type);
  68.     QTreeWidgetItem(const QTreeWidgetItem &other);
  69.     virtual ~QTreeWidgetItem();
  70.     virtual QTreeWidgetItem *clone() const;
  71.     inline QTreeWidget *treeWidget() const { return view; }
  72.     inline void setSelected(bool select);
  73.     inline bool isSelected() const;
  74.     inline void setHidden(bool hide);
  75.     inline bool isHidden() const;
  76.     inline void setExpanded(bool expand);
  77.     inline bool isExpanded() const;
  78.     inline void setFirstColumnSpanned(bool span);
  79.     inline bool isFirstColumnSpanned() const;
  80.     inline void setDisabled(bool disabled);
  81.     inline bool isDisabled() const;
  82.     enum ChildIndicatorPolicy { ShowIndicator, DontShowIndicator, DontShowIndicatorWhenChildless };
  83.     void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy);
  84.     QTreeWidgetItem::ChildIndicatorPolicy childIndicatorPolicy() const;
  85.     Qt::ItemFlags flags() const;
  86.     void setFlags(Qt::ItemFlags flags);
  87.     inline QString text(int column) const
  88.         { return data(column, Qt::DisplayRole).toString(); }
  89.     inline void setText(int column, const QString &text);
  90.     inline QIcon icon(int column) const
  91.         { return qvariant_cast<QIcon>(data(column, Qt::DecorationRole)); }
  92.     inline void setIcon(int column, const QIcon &icon);
  93.     inline QString statusTip(int column) const
  94.         { return data(column, Qt::StatusTipRole).toString(); }
  95.     inline void setStatusTip(int column, const QString &statusTip);
  96. #ifndef QT_NO_TOOLTIP
  97.     inline QString toolTip(int column) const
  98.         { return data(column, Qt::ToolTipRole).toString(); }
  99.     inline void setToolTip(int column, const QString &toolTip);
  100. #endif
  101. #ifndef QT_NO_WHATSTHIS
  102.     inline QString whatsThis(int column) const
  103.         { return data(column, Qt::WhatsThisRole).toString(); }
  104.     inline void setWhatsThis(int column, const QString &whatsThis);
  105. #endif
  106.     inline QFont font(int column) const
  107.         { return qvariant_cast<QFont>(data(column, Qt::FontRole)); }
  108.     inline void setFont(int column, const QFont &font);
  109.     inline int textAlignment(int column) const
  110.         { return data(column, Qt::TextAlignmentRole).toInt(); }
  111.     inline void setTextAlignment(int column, int alignment)
  112.         { setData(column, Qt::TextAlignmentRole, alignment); }
  113.     inline QColor backgroundColor(int column) const
  114.         { return qvariant_cast<QColor>(data(column, Qt::BackgroundColorRole)); }
  115.     inline void setBackgroundColor(int column, const QColor &color)
  116.         { setData(column, Qt::BackgroundColorRole, color); }
  117.     inline QBrush background(int column) const
  118.         { return qvariant_cast<QBrush>(data(column, Qt::BackgroundRole)); }
  119.     inline void setBackground(int column, const QBrush &brush)
  120.         { setData(column, Qt::BackgroundRole, brush); }
  121.     inline QColor textColor(int column) const
  122.         { return qvariant_cast<QColor>(data(column, Qt::TextColorRole)); }
  123.     inline void setTextColor(int column, const QColor &color)
  124.         { setData(column, Qt::TextColorRole, color); }
  125.     inline QBrush foreground(int column) const
  126.         { return qvariant_cast<QBrush>(data(column, Qt::ForegroundRole)); }
  127.     inline void setForeground(int column, const QBrush &brush)
  128.         { setData(column, Qt::ForegroundRole, brush); }
  129.     inline Qt::CheckState checkState(int column) const
  130.         { return static_cast<Qt::CheckState>(data(column, Qt::CheckStateRole).toInt()); }
  131.     inline void setCheckState(int column, Qt::CheckState state)
  132.         { setData(column, Qt::CheckStateRole, state); }
  133.     inline QSize sizeHint(int column) const
  134.         { return qvariant_cast<QSize>(data(column, Qt::SizeHintRole)); }
  135.     inline void setSizeHint(int column, const QSize &size)
  136.         { setData(column, Qt::SizeHintRole, size); }
  137.     virtual QVariant data(int column, int role) const;
  138.     virtual void setData(int column, int role, const QVariant &value);
  139.     virtual bool operator<(const QTreeWidgetItem &other) const;
  140. #ifndef QT_NO_DATASTREAM
  141.     virtual void read(QDataStream &in);
  142.     virtual void write(QDataStream &out) const;
  143. #endif
  144.     QTreeWidgetItem &operator=(const QTreeWidgetItem &other);
  145.     inline QTreeWidgetItem *parent() const { return par; }
  146.     inline QTreeWidgetItem *child(int index) const {
  147.         if (index < 0 || index >= children.size())
  148.             return 0;
  149.         return children.at(index);
  150.     }
  151.     inline int childCount() const { return children.count(); }
  152.     inline int columnCount() const { return values.count(); }
  153.     inline int indexOfChild(QTreeWidgetItem *child) const;
  154.     void addChild(QTreeWidgetItem *child);
  155.     void insertChild(int index, QTreeWidgetItem *child);
  156.     void removeChild(QTreeWidgetItem *child);
  157.     QTreeWidgetItem *takeChild(int index);
  158.     void addChildren(const QList<QTreeWidgetItem*> &children);
  159.     void insertChildren(int index, const QList<QTreeWidgetItem*> &children);
  160.     QList<QTreeWidgetItem*> takeChildren();
  161.     inline int type() const { return rtti; }
  162.     inline void sortChildren(int column, Qt::SortOrder order)
  163.         { sortChildren(column, order, false); }
  164. private:
  165.     void sortChildren(int column, Qt::SortOrder order, bool climb);
  166.     QVariant childrenCheckState(int column) const;
  167.     void itemChanged();
  168.     void executePendingSort() const;
  169.     int rtti;
  170.     // One item has a vector of column entries. Each column has a vector of (role, value) pairs.
  171.     QVector< QVector<QWidgetItemData> > values;
  172.     QTreeWidget *view;
  173.     QTreeWidgetItemPrivate *d;
  174.     QTreeWidgetItem *par;
  175.     QList<QTreeWidgetItem*> children;
  176.     Qt::ItemFlags itemFlags;
  177. };
  178. inline void QTreeWidgetItem::setText(int column, const QString &atext)
  179. { setData(column, Qt::DisplayRole, atext); }
  180. inline void QTreeWidgetItem::setIcon(int column, const QIcon &aicon)
  181. { setData(column, Qt::DecorationRole, aicon); }
  182. #ifndef QT_NO_STATUSTIP
  183. inline void QTreeWidgetItem::setStatusTip(int column, const QString &astatusTip)
  184. { setData(column, Qt::StatusTipRole, astatusTip); }
  185. #endif
  186. #ifndef QT_NO_TOOLTIP
  187. inline void QTreeWidgetItem::setToolTip(int column, const QString &atoolTip)
  188. { setData(column, Qt::ToolTipRole, atoolTip); }
  189. #endif
  190. #ifndef QT_NO_WHATSTHIS
  191. inline void QTreeWidgetItem::setWhatsThis(int column, const QString &awhatsThis)
  192. { setData(column, Qt::WhatsThisRole, awhatsThis); }
  193. #endif
  194. inline void QTreeWidgetItem::setFont(int column, const QFont &afont)
  195. { setData(column, Qt::FontRole, afont); }
  196. inline int QTreeWidgetItem::indexOfChild(QTreeWidgetItem *achild) const
  197. { (void)const_cast<QTreeWidgetItem*>(this)->takeChild(-1); return children.indexOf(achild); }
  198. #ifndef QT_NO_DATASTREAM
  199. Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item);
  200. Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item);
  201. #endif
  202. class QTreeWidgetPrivate;
  203. class Q_GUI_EXPORT QTreeWidget : public QTreeView
  204. {
  205.     Q_OBJECT
  206.     Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
  207.     Q_PROPERTY(int topLevelItemCount READ topLevelItemCount)
  208.     friend class QTreeModel;
  209. public:
  210.     explicit QTreeWidget(QWidget *parent = 0);
  211.     ~QTreeWidget();
  212.     int columnCount() const;
  213.     void setColumnCount(int columns);
  214.     QTreeWidgetItem *invisibleRootItem() const;
  215.     QTreeWidgetItem *topLevelItem(int index) const;
  216.     int topLevelItemCount() const;
  217.     void insertTopLevelItem(int index, QTreeWidgetItem *item);
  218.     void addTopLevelItem(QTreeWidgetItem *item);
  219.     QTreeWidgetItem *takeTopLevelItem(int index);
  220.     int indexOfTopLevelItem(QTreeWidgetItem *item); // ### Qt 5: remove me
  221.     int indexOfTopLevelItem(QTreeWidgetItem *item) const;
  222.     void insertTopLevelItems(int index, const QList<QTreeWidgetItem*> &items);
  223.     void addTopLevelItems(const QList<QTreeWidgetItem*> &items);
  224.     QTreeWidgetItem *headerItem() const;
  225.     void setHeaderItem(QTreeWidgetItem *item);
  226.     void setHeaderLabels(const QStringList &labels);
  227.     inline void setHeaderLabel(const QString &label);
  228.     QTreeWidgetItem *currentItem() const;
  229.     int currentColumn() const;
  230.     void setCurrentItem(QTreeWidgetItem *item);
  231.     void setCurrentItem(QTreeWidgetItem *item, int column);
  232.     void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command);
  233.     QTreeWidgetItem *itemAt(const QPoint &p) const;
  234.     inline QTreeWidgetItem *itemAt(int x, int y) const;
  235.     QRect visualItemRect(const QTreeWidgetItem *item) const;
  236.     int sortColumn() const;
  237.     void sortItems(int column, Qt::SortOrder order);
  238.     void setSortingEnabled(bool enable);
  239.     bool isSortingEnabled() const;
  240.     void editItem(QTreeWidgetItem *item, int column = 0);
  241.     void openPersistentEditor(QTreeWidgetItem *item, int column = 0);
  242.     void closePersistentEditor(QTreeWidgetItem *item, int column = 0);
  243.     QWidget *itemWidget(QTreeWidgetItem *item, int column) const;
  244.     void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget);
  245.     inline void removeItemWidget(QTreeWidgetItem *item, int column);
  246.     bool isItemSelected(const QTreeWidgetItem *item) const;
  247.     void setItemSelected(const QTreeWidgetItem *item, bool select);
  248.     QList<QTreeWidgetItem*> selectedItems() const;
  249.     QList<QTreeWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags,
  250.                                       int column = 0) const;
  251.     bool isItemHidden(const QTreeWidgetItem *item) const;
  252.     void setItemHidden(const QTreeWidgetItem *item, bool hide);
  253.     bool isItemExpanded(const QTreeWidgetItem *item) const;
  254.     void setItemExpanded(const QTreeWidgetItem *item, bool expand);
  255.     bool isFirstItemColumnSpanned(const QTreeWidgetItem *item) const;
  256.     void setFirstItemColumnSpanned(const QTreeWidgetItem *item, bool span);
  257.     QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
  258.     QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
  259. public Q_SLOTS:
  260.     void scrollToItem(const QTreeWidgetItem *item,
  261.                       QAbstractItemView::ScrollHint hint = EnsureVisible);
  262.     void expandItem(const QTreeWidgetItem *item);
  263.     void collapseItem(const QTreeWidgetItem *item);
  264.     void clear();
  265. Q_SIGNALS:
  266.     void itemPressed(QTreeWidgetItem *item, int column);
  267.     void itemClicked(QTreeWidgetItem *item, int column);
  268.     void itemDoubleClicked(QTreeWidgetItem *item, int column);
  269.     void itemActivated(QTreeWidgetItem *item, int column);
  270.     void itemEntered(QTreeWidgetItem *item, int column);
  271.     void itemChanged(QTreeWidgetItem *item, int column);
  272.     void itemExpanded(QTreeWidgetItem *item);
  273.     void itemCollapsed(QTreeWidgetItem *item);
  274.     void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
  275.     void itemSelectionChanged();
  276. protected:
  277.     bool event(QEvent *e);
  278.     virtual QStringList mimeTypes() const;
  279.     virtual QMimeData *mimeData(const QList<QTreeWidgetItem*> items) const;
  280.     virtual bool dropMimeData(QTreeWidgetItem *parent, int index,
  281.                               const QMimeData *data, Qt::DropAction action);
  282.     virtual Qt::DropActions supportedDropActions() const;
  283.     QList<QTreeWidgetItem*> items(const QMimeData *data) const;
  284.     QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const;
  285.     QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const;
  286.     void dropEvent(QDropEvent *event);
  287. private:
  288.     void setModel(QAbstractItemModel *model);
  289.     Q_DECLARE_PRIVATE(QTreeWidget)
  290.     Q_DISABLE_COPY(QTreeWidget)
  291.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index))
  292.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index))
  293.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index))
  294.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index))
  295.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index))
  296.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index))
  297.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemExpanded(const QModelIndex &index))
  298.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemCollapsed(const QModelIndex &index))
  299.     Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex &current))
  300.     Q_PRIVATE_SLOT(d_func(), void _q_sort())
  301.     Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight))
  302.     Q_PRIVATE_SLOT(d_func(), void _q_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected))
  303. };
  304. inline void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column)
  305. { setItemWidget(item, column, 0); }
  306. inline QTreeWidgetItem *QTreeWidget::itemAt(int ax, int ay) const
  307. { return itemAt(QPoint(ax, ay)); }
  308. inline void QTreeWidget::setHeaderLabel(const QString &alabel)
  309. { setHeaderLabels(QStringList(alabel)); }
  310. inline void QTreeWidgetItem::setSelected(bool aselect)
  311. { if (view) view->setItemSelected(this, aselect); }
  312. inline bool QTreeWidgetItem::isSelected() const
  313. { return (view ? view->isItemSelected(this) : false); }
  314. inline void QTreeWidgetItem::setHidden(bool ahide)
  315. { if (view) view->setItemHidden(this, ahide); }
  316. inline bool QTreeWidgetItem::isHidden() const
  317. { return (view ? view->isItemHidden(this) : false); }
  318. inline void QTreeWidgetItem::setExpanded(bool aexpand)
  319. { if (view) view->setItemExpanded(this, aexpand); }
  320. inline bool QTreeWidgetItem::isExpanded() const
  321. { return (view ? view->isItemExpanded(this) : false); }
  322. inline void QTreeWidgetItem::setFirstColumnSpanned(bool aspan)
  323. { if (view) view->setFirstItemColumnSpanned(this, aspan); }
  324. inline bool QTreeWidgetItem::isFirstColumnSpanned() const
  325. { return (view ? view->isFirstItemColumnSpanned(this) : false); }
  326. inline void QTreeWidgetItem::setDisabled(bool disabled)
  327. { setFlags(disabled ? (flags() & ~Qt::ItemIsEnabled) : flags() | Qt::ItemIsEnabled); }
  328. inline bool QTreeWidgetItem::isDisabled() const
  329. { return !(flags() & Qt::ItemIsEnabled); }
  330. #endif // QT_NO_TREEWIDGET
  331. QT_END_NAMESPACE
  332. QT_END_HEADER
  333. #endif // QTREEWIDGET_H