File indexing completed on 2026-09-16 09:22:25
0001
0002
0003
0004
0005 #ifndef QSTANDARDITEMMODEL_H
0006 #define QSTANDARDITEMMODEL_H
0007
0008 #include <QtGui/qtguiglobal.h>
0009 #include <QtCore/qabstractitemmodel.h>
0010 #include <QtGui/qbrush.h>
0011 #include <QtGui/qfont.h>
0012 #include <QtGui/qicon.h>
0013 #ifndef QT_NO_DATASTREAM
0014 #include <QtCore/qdatastream.h>
0015 #endif
0016
0017 QT_REQUIRE_CONFIG(standarditemmodel);
0018
0019 QT_BEGIN_NAMESPACE
0020
0021 class QStandardItemModel;
0022
0023 class QStandardItemPrivate;
0024 class Q_GUI_EXPORT QStandardItem
0025 {
0026 public:
0027 QStandardItem();
0028 explicit QStandardItem(const QString &text);
0029 QStandardItem(const QIcon &icon, const QString &text);
0030 explicit QStandardItem(int rows, int columns = 1);
0031 virtual ~QStandardItem();
0032
0033 virtual QVariant data(int role = Qt::UserRole + 1) const;
0034 virtual void multiData(QModelRoleDataSpan roleDataSpan) const;
0035 virtual void setData(const QVariant &value, int role = Qt::UserRole + 1);
0036 void clearData();
0037
0038 inline QString text() const {
0039 return qvariant_cast<QString>(data(Qt::DisplayRole));
0040 }
0041 inline void setText(const QString &text);
0042
0043 inline QIcon icon() const {
0044 return qvariant_cast<QIcon>(data(Qt::DecorationRole));
0045 }
0046 inline void setIcon(const QIcon &icon);
0047
0048 inline QString toolTip() const {
0049 return qvariant_cast<QString>(data(Qt::ToolTipRole));
0050 }
0051 inline void setToolTip(const QString &toolTip);
0052
0053 #ifndef QT_NO_STATUSTIP
0054 inline QString statusTip() const {
0055 return qvariant_cast<QString>(data(Qt::StatusTipRole));
0056 }
0057 inline void setStatusTip(const QString &statusTip);
0058 #endif
0059
0060 #if QT_CONFIG(whatsthis)
0061 inline QString whatsThis() const {
0062 return qvariant_cast<QString>(data(Qt::WhatsThisRole));
0063 }
0064 inline void setWhatsThis(const QString &whatsThis);
0065 #endif
0066
0067 inline QSize sizeHint() const {
0068 return qvariant_cast<QSize>(data(Qt::SizeHintRole));
0069 }
0070 inline void setSizeHint(const QSize &sizeHint);
0071
0072 inline QFont font() const {
0073 return qvariant_cast<QFont>(data(Qt::FontRole));
0074 }
0075 inline void setFont(const QFont &font);
0076
0077 inline Qt::Alignment textAlignment() const {
0078 return qvariant_cast<Qt::Alignment>(data(Qt::TextAlignmentRole));
0079 }
0080 inline void setTextAlignment(Qt::Alignment textAlignment);
0081
0082 inline QBrush background() const {
0083 return qvariant_cast<QBrush>(data(Qt::BackgroundRole));
0084 }
0085 inline void setBackground(const QBrush &brush);
0086
0087 inline QBrush foreground() const {
0088 return qvariant_cast<QBrush>(data(Qt::ForegroundRole));
0089 }
0090 inline void setForeground(const QBrush &brush);
0091
0092 inline Qt::CheckState checkState() const {
0093 return Qt::CheckState(qvariant_cast<int>(data(Qt::CheckStateRole)));
0094 }
0095 inline void setCheckState(Qt::CheckState checkState);
0096
0097 inline QString accessibleText() const {
0098 return qvariant_cast<QString>(data(Qt::AccessibleTextRole));
0099 }
0100 inline void setAccessibleText(const QString &accessibleText);
0101
0102 inline QString accessibleDescription() const {
0103 return qvariant_cast<QString>(data(Qt::AccessibleDescriptionRole));
0104 }
0105 inline void setAccessibleDescription(const QString &accessibleDescription);
0106
0107 Qt::ItemFlags flags() const;
0108 void setFlags(Qt::ItemFlags flags);
0109
0110 inline bool isEnabled() const {
0111 return bool(flags() & Qt::ItemIsEnabled);
0112 }
0113 void setEnabled(bool enabled);
0114
0115 inline bool isEditable() const {
0116 return bool(flags() & Qt::ItemIsEditable);
0117 }
0118 void setEditable(bool editable);
0119
0120 inline bool isSelectable() const {
0121 return bool(flags() & Qt::ItemIsSelectable);
0122 }
0123 void setSelectable(bool selectable);
0124
0125 inline bool isCheckable() const {
0126 return bool(flags() & Qt::ItemIsUserCheckable);
0127 }
0128 void setCheckable(bool checkable);
0129
0130 inline bool isAutoTristate() const {
0131 return bool(flags() & Qt::ItemIsAutoTristate);
0132 }
0133 void setAutoTristate(bool tristate);
0134
0135 inline bool isUserTristate() const {
0136 return bool(flags() & Qt::ItemIsUserTristate);
0137 }
0138 void setUserTristate(bool tristate);
0139
0140 #if QT_CONFIG(draganddrop)
0141 inline bool isDragEnabled() const {
0142 return bool(flags() & Qt::ItemIsDragEnabled);
0143 }
0144 void setDragEnabled(bool dragEnabled);
0145
0146 inline bool isDropEnabled() const {
0147 return bool(flags() & Qt::ItemIsDropEnabled);
0148 }
0149 void setDropEnabled(bool dropEnabled);
0150 #endif
0151
0152 QStandardItem *parent() const;
0153 int row() const;
0154 int column() const;
0155 QModelIndex index() const;
0156 QStandardItemModel *model() const;
0157
0158 int rowCount() const;
0159 void setRowCount(int rows);
0160 int columnCount() const;
0161 void setColumnCount(int columns);
0162
0163 bool hasChildren() const;
0164 QStandardItem *child(int row, int column = 0) const;
0165 void setChild(int row, int column, QStandardItem *item);
0166 inline void setChild(int row, QStandardItem *item);
0167
0168 void insertRow(int row, const QList<QStandardItem*> &items);
0169 void insertColumn(int column, const QList<QStandardItem*> &items);
0170 void insertRows(int row, const QList<QStandardItem*> &items);
0171 void insertRows(int row, int count);
0172 void insertColumns(int column, int count);
0173
0174 void removeRow(int row);
0175 void removeColumn(int column);
0176 void removeRows(int row, int count);
0177 void removeColumns(int column, int count);
0178
0179 inline void appendRow(const QList<QStandardItem*> &items);
0180 inline void appendRows(const QList<QStandardItem*> &items);
0181 inline void appendColumn(const QList<QStandardItem*> &items);
0182 inline void insertRow(int row, QStandardItem *item);
0183 inline void appendRow(QStandardItem *item);
0184
0185 QStandardItem *takeChild(int row, int column = 0);
0186 QList<QStandardItem*> takeRow(int row);
0187 QList<QStandardItem*> takeColumn(int column);
0188
0189 void sortChildren(int column, Qt::SortOrder order = Qt::AscendingOrder);
0190
0191 virtual QStandardItem *clone() const;
0192
0193 enum ItemType { Type = 0, UserType = 1000 };
0194 virtual int type() const;
0195
0196 #ifndef QT_NO_DATASTREAM
0197 virtual void read(QDataStream &in);
0198 virtual void write(QDataStream &out) const;
0199 #endif
0200 virtual bool operator<(const QStandardItem &other) const;
0201
0202 protected:
0203 QStandardItem(const QStandardItem &other);
0204 QStandardItem(QStandardItemPrivate &dd);
0205 QStandardItem &operator=(const QStandardItem &other);
0206 QScopedPointer<QStandardItemPrivate> d_ptr;
0207
0208 void emitDataChanged();
0209
0210 private:
0211 Q_DECLARE_PRIVATE(QStandardItem)
0212 friend class QStandardItemModelPrivate;
0213 friend class QStandardItemModel;
0214 };
0215
0216 inline void QStandardItem::setText(const QString &atext)
0217 { setData(atext, Qt::DisplayRole); }
0218
0219 inline void QStandardItem::setIcon(const QIcon &aicon)
0220 { setData(aicon, Qt::DecorationRole); }
0221
0222 inline void QStandardItem::setToolTip(const QString &atoolTip)
0223 { setData(atoolTip, Qt::ToolTipRole); }
0224
0225 #ifndef QT_NO_STATUSTIP
0226 inline void QStandardItem::setStatusTip(const QString &astatusTip)
0227 { setData(astatusTip, Qt::StatusTipRole); }
0228 #endif
0229
0230 #if QT_CONFIG(whatsthis)
0231 inline void QStandardItem::setWhatsThis(const QString &awhatsThis)
0232 { setData(awhatsThis, Qt::WhatsThisRole); }
0233 #endif
0234
0235 inline void QStandardItem::setSizeHint(const QSize &asizeHint)
0236 { setData(asizeHint, Qt::SizeHintRole); }
0237
0238 inline void QStandardItem::setFont(const QFont &afont)
0239 { setData(afont, Qt::FontRole); }
0240
0241 inline void QStandardItem::setTextAlignment(Qt::Alignment atextAlignment)
0242 { setData(QVariant::fromValue(atextAlignment), Qt::TextAlignmentRole); }
0243
0244 inline void QStandardItem::setBackground(const QBrush &abrush)
0245 { setData(abrush, Qt::BackgroundRole); }
0246
0247 inline void QStandardItem::setForeground(const QBrush &abrush)
0248 { setData(abrush, Qt::ForegroundRole); }
0249
0250 inline void QStandardItem::setCheckState(Qt::CheckState acheckState)
0251 { setData(acheckState, Qt::CheckStateRole); }
0252
0253 inline void QStandardItem::setAccessibleText(const QString &aaccessibleText)
0254 { setData(aaccessibleText, Qt::AccessibleTextRole); }
0255
0256 inline void QStandardItem::setAccessibleDescription(const QString &aaccessibleDescription)
0257 { setData(aaccessibleDescription, Qt::AccessibleDescriptionRole); }
0258
0259 inline void QStandardItem::setChild(int arow, QStandardItem *aitem)
0260 { setChild(arow, 0, aitem); }
0261
0262 inline void QStandardItem::appendRow(const QList<QStandardItem*> &aitems)
0263 { insertRow(rowCount(), aitems); }
0264
0265 inline void QStandardItem::appendRows(const QList<QStandardItem*> &aitems)
0266 { insertRows(rowCount(), aitems); }
0267
0268 inline void QStandardItem::appendColumn(const QList<QStandardItem*> &aitems)
0269 { insertColumn(columnCount(), aitems); }
0270
0271 inline void QStandardItem::insertRow(int arow, QStandardItem *aitem)
0272 { insertRow(arow, QList<QStandardItem*>() << aitem); }
0273
0274 inline void QStandardItem::appendRow(QStandardItem *aitem)
0275 { insertRow(rowCount(), aitem); }
0276
0277 class QStandardItemModelPrivate;
0278
0279 class Q_GUI_EXPORT QStandardItemModel : public QAbstractItemModel
0280 {
0281 Q_OBJECT
0282 Q_PROPERTY(int sortRole READ sortRole WRITE setSortRole BINDABLE bindableSortRole)
0283
0284 public:
0285 explicit QStandardItemModel(QObject *parent = nullptr);
0286 QStandardItemModel(int rows, int columns, QObject *parent = nullptr);
0287 ~QStandardItemModel();
0288
0289 void setItemRoleNames(const QHash<int,QByteArray> &roleNames);
0290 QHash<int, QByteArray> roleNames() const override;
0291
0292 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
0293 QModelIndex parent(const QModelIndex &child) const override;
0294
0295 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0296 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
0297 bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
0298
0299 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0300 void multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const override;
0301 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
0302 bool clearItemData(const QModelIndex &index) override;
0303
0304 QVariant headerData(int section, Qt::Orientation orientation,
0305 int role = Qt::DisplayRole) const override;
0306 bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
0307 int role = Qt::EditRole) override;
0308
0309 bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
0310 bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
0311 bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
0312 bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override;
0313
0314 Qt::ItemFlags flags(const QModelIndex &index) const override;
0315 Qt::DropActions supportedDropActions() const override;
0316
0317 QMap<int, QVariant> itemData(const QModelIndex &index) const override;
0318 bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) override;
0319
0320 void clear();
0321
0322 using QObject::parent;
0323
0324 void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
0325
0326 QStandardItem *itemFromIndex(const QModelIndex &index) const;
0327 QModelIndex indexFromItem(const QStandardItem *item) const;
0328
0329 QStandardItem *item(int row, int column = 0) const;
0330 void setItem(int row, int column, QStandardItem *item);
0331 inline void setItem(int row, QStandardItem *item);
0332 QStandardItem *invisibleRootItem() const;
0333
0334 QStandardItem *horizontalHeaderItem(int column) const;
0335 void setHorizontalHeaderItem(int column, QStandardItem *item);
0336 QStandardItem *verticalHeaderItem(int row) const;
0337 void setVerticalHeaderItem(int row, QStandardItem *item);
0338
0339 void setHorizontalHeaderLabels(const QStringList &labels);
0340 void setVerticalHeaderLabels(const QStringList &labels);
0341
0342 void setRowCount(int rows);
0343 void setColumnCount(int columns);
0344
0345 void appendRow(const QList<QStandardItem*> &items);
0346 void appendColumn(const QList<QStandardItem*> &items);
0347 inline void appendRow(QStandardItem *item);
0348
0349 void insertRow(int row, const QList<QStandardItem*> &items);
0350 void insertColumn(int column, const QList<QStandardItem*> &items);
0351 inline void insertRow(int row, QStandardItem *item);
0352
0353 inline bool insertRow(int row, const QModelIndex &parent = QModelIndex());
0354 inline bool insertColumn(int column, const QModelIndex &parent = QModelIndex());
0355
0356 QStandardItem *takeItem(int row, int column = 0);
0357 QList<QStandardItem*> takeRow(int row);
0358 QList<QStandardItem*> takeColumn(int column);
0359
0360 QStandardItem *takeHorizontalHeaderItem(int column);
0361 QStandardItem *takeVerticalHeaderItem(int row);
0362
0363 const QStandardItem *itemPrototype() const;
0364 void setItemPrototype(const QStandardItem *item);
0365
0366 QList<QStandardItem*> findItems(const QString &text,
0367 Qt::MatchFlags flags = Qt::MatchExactly,
0368 int column = 0) const;
0369
0370 int sortRole() const;
0371 void setSortRole(int role);
0372 QBindable<int> bindableSortRole();
0373
0374 QStringList mimeTypes() const override;
0375 QMimeData *mimeData(const QModelIndexList &indexes) const override;
0376 bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
0377
0378 Q_SIGNALS:
0379 void itemChanged(QStandardItem *item);
0380
0381 protected:
0382 QStandardItemModel(QStandardItemModelPrivate &dd, QObject *parent = nullptr);
0383
0384 private:
0385 friend class QStandardItemPrivate;
0386 friend class QStandardItem;
0387 Q_DISABLE_COPY(QStandardItemModel)
0388 Q_DECLARE_PRIVATE(QStandardItemModel)
0389
0390 Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &topLeft,
0391 const QModelIndex &bottomRight))
0392 };
0393
0394 inline void QStandardItemModel::setItem(int arow, QStandardItem *aitem)
0395 { setItem(arow, 0, aitem); }
0396
0397 inline void QStandardItemModel::appendRow(QStandardItem *aitem)
0398 { appendRow(QList<QStandardItem*>() << aitem); }
0399
0400 inline void QStandardItemModel::insertRow(int arow, QStandardItem *aitem)
0401 { insertRow(arow, QList<QStandardItem*>() << aitem); }
0402
0403 inline bool QStandardItemModel::insertRow(int arow, const QModelIndex &aparent)
0404 { return QAbstractItemModel::insertRow(arow, aparent); }
0405 inline bool QStandardItemModel::insertColumn(int acolumn, const QModelIndex &aparent)
0406 { return QAbstractItemModel::insertColumn(acolumn, aparent); }
0407
0408 #ifndef QT_NO_DATASTREAM
0409 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QStandardItem &item);
0410 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QStandardItem &item);
0411 #endif
0412
0413 QT_END_NAMESPACE
0414
0415 #endif