Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-26 09:09:57

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QTABLEWIDGET_H
0006 #define QTABLEWIDGET_H
0007 
0008 #include <QtWidgets/qtableview.h>
0009 #include <QtWidgets/qtwidgetsglobal.h>
0010 #include <QtCore/qlist.h>
0011 #include <QtCore/qvariant.h>
0012 
0013 QT_REQUIRE_CONFIG(tablewidget);
0014 
0015 QT_BEGIN_NAMESPACE
0016 
0017 class QTableWidgetSelectionRange
0018 {
0019 public:
0020     QTableWidgetSelectionRange() = default;
0021     QTableWidgetSelectionRange(int top, int left, int bottom, int right)
0022       : m_top(top), m_left(left), m_bottom(bottom), m_right(right)
0023     {}
0024 
0025     friend bool operator==(const QTableWidgetSelectionRange &lhs,
0026                            const QTableWidgetSelectionRange &rhs) noexcept
0027     {
0028         return lhs.m_top == rhs.m_top && lhs.m_left == rhs.m_left && lhs.m_bottom == rhs.m_bottom
0029                 && lhs.m_right == rhs.m_right;
0030     }
0031     friend bool operator!=(const QTableWidgetSelectionRange &lhs,
0032                            const QTableWidgetSelectionRange &rhs) noexcept
0033     { return !(lhs == rhs); }
0034 
0035     inline int topRow() const { return m_top; }
0036     inline int bottomRow() const { return m_bottom; }
0037     inline int leftColumn() const { return m_left; }
0038     inline int rightColumn() const { return m_right; }
0039     inline int rowCount() const { return m_bottom - m_top + 1; }
0040     inline int columnCount() const { return m_right - m_left + 1; }
0041 private:
0042     int m_top = -1, m_left = -1, m_bottom = -2, m_right = -2;
0043 };
0044 
0045 class QTableWidget;
0046 class QTableModel;
0047 class QWidgetItemData;
0048 class QTableWidgetItemPrivate;
0049 
0050 class Q_WIDGETS_EXPORT QTableWidgetItem
0051 {
0052     friend class QTableWidget;
0053     friend class QTableModel;
0054 public:
0055     enum ItemType { Type = 0, UserType = 1000 };
0056     explicit QTableWidgetItem(int type = Type);
0057     explicit QTableWidgetItem(const QString &text, int type = Type);
0058     explicit QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type);
0059     QTableWidgetItem(const QTableWidgetItem &other);
0060     virtual ~QTableWidgetItem();
0061 
0062     virtual QTableWidgetItem *clone() const;
0063 
0064     inline QTableWidget *tableWidget() const { return view; }
0065 
0066     inline int row() const;
0067     inline int column() const;
0068 
0069     void setSelected(bool select);
0070     bool isSelected() const;
0071 
0072     inline Qt::ItemFlags flags() const { return itemFlags; }
0073     void setFlags(Qt::ItemFlags flags);
0074 
0075     inline QString text() const
0076         { return data(Qt::DisplayRole).toString(); }
0077     inline void setText(const QString &text);
0078 
0079     inline QIcon icon() const
0080         { return qvariant_cast<QIcon>(data(Qt::DecorationRole)); }
0081     inline void setIcon(const QIcon &icon);
0082 
0083     inline QString statusTip() const
0084         { return data(Qt::StatusTipRole).toString(); }
0085     inline void setStatusTip(const QString &statusTip);
0086 
0087 #if QT_CONFIG(tooltip)
0088     inline QString toolTip() const
0089         { return data(Qt::ToolTipRole).toString(); }
0090     inline void setToolTip(const QString &toolTip);
0091 #endif
0092 
0093 #if QT_CONFIG(whatsthis)
0094     inline QString whatsThis() const
0095         { return data(Qt::WhatsThisRole).toString(); }
0096     inline void setWhatsThis(const QString &whatsThis);
0097 #endif
0098 
0099     inline QFont font() const
0100         { return qvariant_cast<QFont>(data(Qt::FontRole)); }
0101     inline void setFont(const QFont &font);
0102 
0103 #if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
0104     inline int textAlignment() const
0105         { return data(Qt::TextAlignmentRole).toInt(); }
0106 #else
0107     inline Qt::Alignment textAlignment() const
0108     { return qvariant_cast<Qt::Alignment>(data(Qt::TextAlignmentRole)); }
0109 #endif
0110 #if QT_DEPRECATED_SINCE(6, 4)
0111     QT_DEPRECATED_VERSION_X_6_4("Use the overload taking Qt::Alignment")
0112     inline void setTextAlignment(int alignment)
0113         { setData(Qt::TextAlignmentRole, alignment); }
0114     inline void setTextAlignment(Qt::AlignmentFlag alignment)
0115         { setData(Qt::TextAlignmentRole, QVariant::fromValue(Qt::Alignment(alignment))); }
0116 #endif
0117     inline void setTextAlignment(Qt::Alignment alignment)
0118         { setData(Qt::TextAlignmentRole, QVariant::fromValue(alignment)); }
0119 
0120     inline QBrush background() const
0121         { return qvariant_cast<QBrush>(data(Qt::BackgroundRole)); }
0122     inline void setBackground(const QBrush &brush)
0123         { setData(Qt::BackgroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
0124 
0125     inline QBrush foreground() const
0126         { return qvariant_cast<QBrush>(data(Qt::ForegroundRole)); }
0127     inline void setForeground(const QBrush &brush)
0128         { setData(Qt::ForegroundRole, brush.style() != Qt::NoBrush ? QVariant(brush) : QVariant()); }
0129 
0130     inline Qt::CheckState checkState() const
0131         { return qvariant_cast<Qt::CheckState>(data(Qt::CheckStateRole)); }
0132     inline void setCheckState(Qt::CheckState state)
0133         { setData(Qt::CheckStateRole, state); }
0134 
0135     inline QSize sizeHint() const
0136         { return qvariant_cast<QSize>(data(Qt::SizeHintRole)); }
0137     inline void setSizeHint(const QSize &size)
0138         { setData(Qt::SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); }
0139 
0140     virtual QVariant data(int role) const;
0141     virtual void setData(int role, const QVariant &value);
0142 
0143     virtual bool operator<(const QTableWidgetItem &other) const;
0144 
0145 #ifndef QT_NO_DATASTREAM
0146     virtual void read(QDataStream &in);
0147     virtual void write(QDataStream &out) const;
0148 #endif
0149     QTableWidgetItem &operator=(const QTableWidgetItem &other);
0150 
0151     inline int type() const { return rtti; }
0152 
0153 private:
0154     QTableModel *tableModel() const;
0155 
0156 private:
0157     int rtti;
0158     QList<QWidgetItemData> values;
0159     QTableWidget *view;
0160     QTableWidgetItemPrivate *d;
0161     Qt::ItemFlags itemFlags;
0162 };
0163 
0164 inline void QTableWidgetItem::setText(const QString &atext)
0165 { setData(Qt::DisplayRole, atext); }
0166 
0167 inline void QTableWidgetItem::setIcon(const QIcon &aicon)
0168 { setData(Qt::DecorationRole, aicon); }
0169 
0170 inline void QTableWidgetItem::setStatusTip(const QString &astatusTip)
0171 { setData(Qt::StatusTipRole, astatusTip); }
0172 
0173 #if QT_CONFIG(tooltip)
0174 inline void QTableWidgetItem::setToolTip(const QString &atoolTip)
0175 { setData(Qt::ToolTipRole, atoolTip); }
0176 #endif
0177 
0178 #if QT_CONFIG(whatsthis)
0179 inline void QTableWidgetItem::setWhatsThis(const QString &awhatsThis)
0180 { setData(Qt::WhatsThisRole, awhatsThis); }
0181 #endif
0182 
0183 inline void QTableWidgetItem::setFont(const QFont &afont)
0184 { setData(Qt::FontRole, afont); }
0185 
0186 #ifndef QT_NO_DATASTREAM
0187 Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item);
0188 Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item);
0189 #endif
0190 
0191 class QTableWidgetPrivate;
0192 
0193 class Q_WIDGETS_EXPORT QTableWidget : public QTableView
0194 {
0195     Q_OBJECT
0196     Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount)
0197     Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
0198 #if QT_CONFIG(draganddrop)
0199     Q_PROPERTY(Qt::DropActions supportedDragActions READ supportedDragActions WRITE setSupportedDragActions)
0200 #endif
0201 
0202     friend class QTableModel;
0203 public:
0204     explicit QTableWidget(QWidget *parent = nullptr);
0205     QTableWidget(int rows, int columns, QWidget *parent = nullptr);
0206     ~QTableWidget();
0207 
0208     void setRowCount(int rows);
0209     int rowCount() const;
0210 
0211     void setColumnCount(int columns);
0212     int columnCount() const;
0213 
0214     int row(const QTableWidgetItem *item) const;
0215     int column(const QTableWidgetItem *item) const;
0216 
0217     QTableWidgetItem *item(int row, int column) const;
0218     void setItem(int row, int column, QTableWidgetItem *item);
0219     QTableWidgetItem *takeItem(int row, int column);
0220     QList<QTableWidgetItem*> items(const QMimeData *data) const;
0221     QModelIndex indexFromItem(const QTableWidgetItem *item) const;
0222     QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
0223 
0224     QTableWidgetItem *verticalHeaderItem(int row) const;
0225     void setVerticalHeaderItem(int row, QTableWidgetItem *item);
0226     QTableWidgetItem *takeVerticalHeaderItem(int row);
0227 
0228     QTableWidgetItem *horizontalHeaderItem(int column) const;
0229     void setHorizontalHeaderItem(int column, QTableWidgetItem *item);
0230     QTableWidgetItem *takeHorizontalHeaderItem(int column);
0231     void setVerticalHeaderLabels(const QStringList &labels);
0232     void setHorizontalHeaderLabels(const QStringList &labels);
0233 
0234     int currentRow() const;
0235     int currentColumn() const;
0236     QTableWidgetItem *currentItem() const;
0237     void setCurrentItem(QTableWidgetItem *item);
0238     void setCurrentItem(QTableWidgetItem *item, QItemSelectionModel::SelectionFlags command);
0239     void setCurrentCell(int row, int column);
0240     void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command);
0241 
0242     void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder);
0243     void setSortingEnabled(bool enable);
0244     bool isSortingEnabled() const;
0245 
0246     void editItem(QTableWidgetItem *item);
0247     void openPersistentEditor(QTableWidgetItem *item);
0248     void closePersistentEditor(QTableWidgetItem *item);
0249     using QAbstractItemView::isPersistentEditorOpen;
0250     bool isPersistentEditorOpen(QTableWidgetItem *item) const;
0251 
0252     QWidget *cellWidget(int row, int column) const;
0253     void setCellWidget(int row, int column, QWidget *widget);
0254     inline void removeCellWidget(int row, int column);
0255 
0256     void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
0257 
0258     QList<QTableWidgetSelectionRange> selectedRanges() const;
0259     QList<QTableWidgetItem*> selectedItems() const;
0260     QList<QTableWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags) const;
0261 
0262     int visualRow(int logicalRow) const;
0263     int visualColumn(int logicalColumn) const;
0264 
0265     QTableWidgetItem *itemAt(const QPoint &p) const;
0266     inline QTableWidgetItem *itemAt(int x, int y) const;
0267     QRect visualItemRect(const QTableWidgetItem *item) const;
0268 
0269     const QTableWidgetItem *itemPrototype() const;
0270     void setItemPrototype(const QTableWidgetItem *item);
0271 
0272 #if QT_CONFIG(draganddrop)
0273     Qt::DropActions supportedDragActions() const;
0274     void setSupportedDragActions(Qt::DropActions actions);
0275 #endif
0276 
0277 public Q_SLOTS:
0278     void scrollToItem(const QTableWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);
0279     void insertRow(int row);
0280     void insertColumn(int column);
0281     void removeRow(int row);
0282     void removeColumn(int column);
0283     void clear();
0284     void clearContents();
0285 
0286 Q_SIGNALS:
0287     void itemPressed(QTableWidgetItem *item);
0288     void itemClicked(QTableWidgetItem *item);
0289     void itemDoubleClicked(QTableWidgetItem *item);
0290 
0291     void itemActivated(QTableWidgetItem *item);
0292     void itemEntered(QTableWidgetItem *item);
0293     void itemChanged(QTableWidgetItem *item);
0294 
0295     void currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous);
0296     void itemSelectionChanged();
0297 
0298     void cellPressed(int row, int column);
0299     void cellClicked(int row, int column);
0300     void cellDoubleClicked(int row, int column);
0301 
0302     void cellActivated(int row, int column);
0303     void cellEntered(int row, int column);
0304     void cellChanged(int row, int column);
0305 
0306     void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
0307 
0308 protected:
0309     bool event(QEvent *e) override;
0310     virtual QStringList mimeTypes() const;
0311     virtual QMimeData *mimeData(const QList<QTableWidgetItem *> &items) const;
0312     virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action);
0313     virtual Qt::DropActions supportedDropActions() const;
0314 
0315 protected:
0316 #if QT_CONFIG(draganddrop)
0317     void dropEvent(QDropEvent *event) override;
0318 #endif
0319 private:
0320     void setModel(QAbstractItemModel *model) override;
0321 
0322     Q_DECLARE_PRIVATE(QTableWidget)
0323     Q_DISABLE_COPY(QTableWidget)
0324 };
0325 
0326 inline void QTableWidget::removeCellWidget(int arow, int acolumn)
0327 { setCellWidget(arow, acolumn, nullptr); }
0328 
0329 inline QTableWidgetItem *QTableWidget::itemAt(int ax, int ay) const
0330 { return itemAt(QPoint(ax, ay)); }
0331 
0332 inline int QTableWidgetItem::row() const
0333 { return (view ? view->row(this) : -1); }
0334 
0335 inline int QTableWidgetItem::column() const
0336 { return (view ? view->column(this) : -1); }
0337 
0338 QT_END_NAMESPACE
0339 
0340 #endif // QTABLEWIDGET_H