qtablewidget.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 QTABLEWIDGET_H
  38. #define QTABLEWIDGET_H
  39. #include <QtGui/qtableview.h>
  40. #include <QtCore/qvariant.h>
  41. #include <QtCore/qvector.h>
  42. //#include <QtGui/qitemselectionmodel.h>
  43. QT_BEGIN_HEADER
  44. QT_BEGIN_NAMESPACE
  45. QT_MODULE(Gui)
  46. #ifndef QT_NO_TABLEWIDGET
  47. class Q_GUI_EXPORT QTableWidgetSelectionRange
  48. {
  49. public:
  50.     QTableWidgetSelectionRange();
  51.     QTableWidgetSelectionRange(int top, int left, int bottom, int right);
  52.     QTableWidgetSelectionRange(const QTableWidgetSelectionRange &other);
  53.     ~QTableWidgetSelectionRange();
  54.     inline int topRow() const { return top; }
  55.     inline int bottomRow() const { return bottom; }
  56.     inline int leftColumn() const { return left; }
  57.     inline int rightColumn() const { return right; }
  58.     inline int rowCount() const { return bottom - top + 1; }
  59.     inline int columnCount() const { return right - left + 1; }
  60. private:
  61.     int top, left, bottom, right;
  62. };
  63. class QTableWidget;
  64. class QTableModel;
  65. class QWidgetItemData;
  66. class QTableWidgetItemPrivate;
  67. class Q_GUI_EXPORT QTableWidgetItem
  68. {
  69.     friend class QTableWidget;
  70.     friend class QTableModel;
  71. public:
  72.     enum ItemType { Type = 0, UserType = 1000 };
  73.     QTableWidgetItem(int type = Type);
  74.     explicit QTableWidgetItem(const QString &text, int type = Type);
  75.     explicit QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type);
  76.     QTableWidgetItem(const QTableWidgetItem &other);
  77.     virtual ~QTableWidgetItem();
  78.     virtual QTableWidgetItem *clone() const;
  79.     inline QTableWidget *tableWidget() const { return view; }
  80.     inline int row() const;
  81.     inline int column() const;
  82.     inline void setSelected(bool select);
  83.     inline bool isSelected() const;
  84.     inline Qt::ItemFlags flags() const { return itemFlags; }
  85.     void setFlags(Qt::ItemFlags flags);
  86.     inline QString text() const
  87.         { return data(Qt::DisplayRole).toString(); }
  88.     inline void setText(const QString &text);
  89.     inline QIcon icon() const
  90.         { return qvariant_cast<QIcon>(data(Qt::DecorationRole)); }
  91.     inline void setIcon(const QIcon &icon);
  92.     inline QString statusTip() const
  93.         { return data(Qt::StatusTipRole).toString(); }
  94.     inline void setStatusTip(const QString &statusTip);
  95. #ifndef QT_NO_TOOLTIP
  96.     inline QString toolTip() const
  97.         { return data(Qt::ToolTipRole).toString(); }
  98.     inline void setToolTip(const QString &toolTip);
  99. #endif
  100. #ifndef QT_NO_WHATSTHIS
  101.     inline QString whatsThis() const
  102.         { return data(Qt::WhatsThisRole).toString(); }
  103.     inline void setWhatsThis(const QString &whatsThis);
  104. #endif
  105.     inline QFont font() const
  106.         { return qvariant_cast<QFont>(data(Qt::FontRole)); }
  107.     inline void setFont(const QFont &font);
  108.     inline int textAlignment() const
  109.         { return data(Qt::TextAlignmentRole).toInt(); }
  110.     inline void setTextAlignment(int alignment)
  111.         { setData(Qt::TextAlignmentRole, alignment); }
  112.     inline QColor backgroundColor() const
  113.         { return qvariant_cast<QColor>(data(Qt::BackgroundColorRole)); }
  114.     inline void setBackgroundColor(const QColor &color)
  115.         { setData(Qt::BackgroundColorRole, color); }
  116.     inline QBrush background() const
  117.         { return qvariant_cast<QBrush>(data(Qt::BackgroundRole)); }
  118.     inline void setBackground(const QBrush &brush)
  119.         { setData(Qt::BackgroundRole, brush); }
  120.     inline QColor textColor() const
  121.         { return qvariant_cast<QColor>(data(Qt::TextColorRole)); }
  122.     inline void setTextColor(const QColor &color)
  123.         { setData(Qt::TextColorRole, color); }
  124.     inline QBrush foreground() const
  125.         { return qvariant_cast<QBrush>(data(Qt::ForegroundRole)); }
  126.     inline void setForeground(const QBrush &brush)
  127.         { setData(Qt::ForegroundRole, brush); }
  128.     inline Qt::CheckState checkState() const
  129.         { return static_cast<Qt::CheckState>(data(Qt::CheckStateRole).toInt()); }
  130.     inline void setCheckState(Qt::CheckState state)
  131.         { setData(Qt::CheckStateRole, state); }
  132.     inline QSize sizeHint() const
  133.         { return qvariant_cast<QSize>(data(Qt::SizeHintRole)); }
  134.     inline void setSizeHint(const QSize &size)
  135.         { setData(Qt::SizeHintRole, size); }
  136.     virtual QVariant data(int role) const;
  137.     virtual void setData(int role, const QVariant &value);
  138.     virtual bool operator<(const QTableWidgetItem &other) const;
  139. #ifndef QT_NO_DATASTREAM
  140.     virtual void read(QDataStream &in);
  141.     virtual void write(QDataStream &out) const;
  142. #endif
  143.     QTableWidgetItem &operator=(const QTableWidgetItem &other);
  144.     inline int type() const { return rtti; }
  145. private:
  146.     int rtti;
  147.     QVector<QWidgetItemData> values;
  148.     QTableWidget *view;
  149.     QTableWidgetItemPrivate *d;
  150.     Qt::ItemFlags itemFlags;
  151. };
  152. inline void QTableWidgetItem::setText(const QString &atext)
  153. { setData(Qt::DisplayRole, atext); }
  154. inline void QTableWidgetItem::setIcon(const QIcon &aicon)
  155. { setData(Qt::DecorationRole, aicon); }
  156. inline void QTableWidgetItem::setStatusTip(const QString &astatusTip)
  157. { setData(Qt::StatusTipRole, astatusTip); }
  158. #ifndef QT_NO_TOOLTIP
  159. inline void QTableWidgetItem::setToolTip(const QString &atoolTip)
  160. { setData(Qt::ToolTipRole, atoolTip); }
  161. #endif
  162. #ifndef QT_NO_WHATSTHIS
  163. inline void QTableWidgetItem::setWhatsThis(const QString &awhatsThis)
  164. { setData(Qt::WhatsThisRole, awhatsThis); }
  165. #endif
  166. inline void QTableWidgetItem::setFont(const QFont &afont)
  167. { setData(Qt::FontRole, afont); }
  168. #ifndef QT_NO_DATASTREAM
  169. Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item);
  170. Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item);
  171. #endif
  172. class QTableWidgetPrivate;
  173. class Q_GUI_EXPORT QTableWidget : public QTableView
  174. {
  175.     Q_OBJECT
  176.     Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount)
  177.     Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
  178.     friend class QTableModel;
  179. public:
  180.     explicit QTableWidget(QWidget *parent = 0);
  181.     QTableWidget(int rows, int columns, QWidget *parent = 0);
  182.     ~QTableWidget();
  183.     void setRowCount(int rows);
  184.     int rowCount() const;
  185.     void setColumnCount(int columns);
  186.     int columnCount() const;
  187.     int row(const QTableWidgetItem *item) const;
  188.     int column(const QTableWidgetItem *item) const;
  189.     QTableWidgetItem *item(int row, int column) const;
  190.     void setItem(int row, int column, QTableWidgetItem *item);
  191.     QTableWidgetItem *takeItem(int row, int column);
  192.     QTableWidgetItem *verticalHeaderItem(int row) const;
  193.     void setVerticalHeaderItem(int row, QTableWidgetItem *item);
  194.     QTableWidgetItem *takeVerticalHeaderItem(int row);
  195.     QTableWidgetItem *horizontalHeaderItem(int column) const;
  196.     void setHorizontalHeaderItem(int column, QTableWidgetItem *item);
  197.     QTableWidgetItem *takeHorizontalHeaderItem(int column);
  198.     void setVerticalHeaderLabels(const QStringList &labels);
  199.     void setHorizontalHeaderLabels(const QStringList &labels);
  200.     int currentRow() const;
  201.     int currentColumn() const;
  202.     QTableWidgetItem *currentItem() const;
  203.     void setCurrentItem(QTableWidgetItem *item);
  204.     void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command);
  205.     void setCurrentCell(int row, int column);
  206.     void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command);
  207.     void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder);
  208.     void setSortingEnabled(bool enable);
  209.     bool isSortingEnabled() const;
  210.     void editItem(QTableWidgetItem *item);
  211.     void openPersistentEditor(QTableWidgetItem *item);
  212.     void closePersistentEditor(QTableWidgetItem *item);
  213.     QWidget *cellWidget(int row, int column) const;
  214.     void setCellWidget(int row, int column, QWidget *widget);
  215.     inline void removeCellWidget(int row, int column);
  216.     bool isItemSelected(const QTableWidgetItem *item) const;
  217.     void setItemSelected(const QTableWidgetItem *item, bool select);
  218.     void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
  219.     QList<QTableWidgetSelectionRange> selectedRanges() const;
  220.     QList<QTableWidgetItem*> selectedItems();
  221.     QList<QTableWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags) const;
  222.     int visualRow(int logicalRow) const;
  223.     int visualColumn(int logicalColumn) const;
  224.     QTableWidgetItem *itemAt(const QPoint &p) const;
  225.     inline QTableWidgetItem *itemAt(int x, int y) const;
  226.     QRect visualItemRect(const QTableWidgetItem *item) const;
  227.     const QTableWidgetItem *itemPrototype() const;
  228.     void setItemPrototype(const QTableWidgetItem *item);
  229. public Q_SLOTS:
  230.     void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);
  231.     void insertRow(int row);
  232.     void insertColumn(int column);
  233.     void removeRow(int row);
  234.     void removeColumn(int column);
  235.     void clear();
  236.     void clearContents();
  237. Q_SIGNALS:
  238.     void itemPressed(QTableWidgetItem *item);
  239.     void itemClicked(QTableWidgetItem *item);
  240.     void itemDoubleClicked(QTableWidgetItem *item);
  241.     void itemActivated(QTableWidgetItem *item);
  242.     void itemEntered(QTableWidgetItem *item);
  243.     void itemChanged(QTableWidgetItem *item);
  244.     void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
  245.     void itemSelectionChanged();
  246.     void cellPressed(int row, int column);
  247.     void cellClicked(int row, int column);
  248.     void cellDoubleClicked(int row, int column);
  249.     void cellActivated(int row, int column);
  250.     void cellEntered(int row, int column);
  251.     void cellChanged(int row, int column);
  252.     void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
  253. protected:
  254.     bool event(QEvent *e);
  255.     virtual QStringList mimeTypes() const;
  256.     virtual QMimeData *mimeData(const QList<QTableWidgetItem*> items) const;
  257.     virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action);
  258.     virtual Qt::DropActions supportedDropActions() const;
  259.     QList<QTableWidgetItem*> items(const QMimeData *data) const;
  260.     QModelIndex indexFromItem(QTableWidgetItem *item) const;
  261.     QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
  262.     void dropEvent(QDropEvent *event);
  263. private:
  264.     void setModel(QAbstractItemModel *model);
  265.     Q_DECLARE_PRIVATE(QTableWidget)
  266.     Q_DISABLE_COPY(QTableWidget)
  267.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index))
  268.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index))
  269.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index))
  270.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index))
  271.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index))
  272.     Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index))
  273.     Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex &current))
  274.     Q_PRIVATE_SLOT(d_func(), void _q_sort())
  275.     Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight))
  276. };
  277. inline void QTableWidget::removeCellWidget(int arow, int acolumn)
  278. { setCellWidget(arow, acolumn, 0); }
  279. inline QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const
  280. { return itemAt(QPoint(ax, ay)); }
  281. inline int QTableWidgetItem::row() const
  282. { return (view ? view->row(this) : -1); }
  283. inline int QTableWidgetItem::column() const
  284. { return (view ? view->column(this) : -1); }
  285. inline void QTableWidgetItem::setSelected(bool aselect)
  286. { if (view) view->setItemSelected(this, aselect); }
  287. inline bool QTableWidgetItem::isSelected() const
  288. { return (view ? view->isItemSelected(this) : false); }
  289. #endif // QT_NO_TABLEWIDGET
  290. QT_END_NAMESPACE
  291. QT_END_HEADER
  292. #endif // QTABLEWIDGET_H