File indexing completed on 2026-05-05 08:49:13
0001
0002
0003
0004
0005 #ifndef QCOMBOBOX_H
0006 #define QCOMBOBOX_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qwidget.h>
0010 #include <QtWidgets/qabstractitemdelegate.h>
0011 #include <QtCore/qabstractitemmodel.h>
0012 #include <QtCore/qvariant.h>
0013 #include <QtGui/qvalidator.h>
0014
0015 QT_REQUIRE_CONFIG(combobox);
0016
0017 QT_BEGIN_NAMESPACE
0018
0019 class QAbstractItemView;
0020 class QLineEdit;
0021 class QComboBoxPrivate;
0022 class QCompleter;
0023
0024 class Q_WIDGETS_EXPORT QComboBox : public QWidget
0025 {
0026 Q_OBJECT
0027
0028 Q_PROPERTY(bool editable READ isEditable WRITE setEditable)
0029 Q_PROPERTY(int count READ count)
0030 Q_PROPERTY(QString currentText READ currentText WRITE setCurrentText NOTIFY currentTextChanged
0031 USER true)
0032 Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
0033 Q_PROPERTY(QVariant currentData READ currentData)
0034 Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems)
0035 Q_PROPERTY(int maxCount READ maxCount WRITE setMaxCount)
0036 Q_PROPERTY(InsertPolicy insertPolicy READ insertPolicy WRITE setInsertPolicy)
0037 Q_PROPERTY(SizeAdjustPolicy sizeAdjustPolicy READ sizeAdjustPolicy WRITE setSizeAdjustPolicy)
0038 Q_PROPERTY(int minimumContentsLength READ minimumContentsLength WRITE setMinimumContentsLength)
0039 Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
0040 Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
0041 Q_PROPERTY(bool duplicatesEnabled READ duplicatesEnabled WRITE setDuplicatesEnabled)
0042 Q_PROPERTY(bool frame READ hasFrame WRITE setFrame)
0043 Q_PROPERTY(int modelColumn READ modelColumn WRITE setModelColumn)
0044 Q_PROPERTY(LabelDrawingMode labelDrawingMode READ labelDrawingMode WRITE setLabelDrawingMode)
0045
0046 public:
0047 explicit QComboBox(QWidget *parent = nullptr);
0048 ~QComboBox();
0049
0050 int maxVisibleItems() const;
0051 void setMaxVisibleItems(int maxItems);
0052
0053 int count() const;
0054 void setMaxCount(int max);
0055 int maxCount() const;
0056
0057 bool duplicatesEnabled() const;
0058 void setDuplicatesEnabled(bool enable);
0059
0060 void setFrame(bool);
0061 bool hasFrame() const;
0062
0063 inline int findText(const QString &text,
0064 Qt::MatchFlags flags = static_cast<Qt::MatchFlags>(Qt::MatchExactly|Qt::MatchCaseSensitive)) const
0065 { return findData(text, Qt::DisplayRole, flags); }
0066 int findData(const QVariant &data, int role = Qt::UserRole,
0067 Qt::MatchFlags flags = static_cast<Qt::MatchFlags>(Qt::MatchExactly|Qt::MatchCaseSensitive)) const;
0068
0069 enum InsertPolicy {
0070 NoInsert,
0071 InsertAtTop,
0072 InsertAtCurrent,
0073 InsertAtBottom,
0074 InsertAfterCurrent,
0075 InsertBeforeCurrent,
0076 InsertAlphabetically
0077 };
0078 Q_ENUM(InsertPolicy)
0079
0080 InsertPolicy insertPolicy() const;
0081 void setInsertPolicy(InsertPolicy policy);
0082
0083 enum SizeAdjustPolicy {
0084 AdjustToContents,
0085 AdjustToContentsOnFirstShow,
0086 AdjustToMinimumContentsLengthWithIcon
0087 };
0088 Q_ENUM(SizeAdjustPolicy)
0089
0090 enum class LabelDrawingMode {
0091 UseStyle,
0092 UseDelegate,
0093 };
0094 Q_ENUM(LabelDrawingMode)
0095
0096 SizeAdjustPolicy sizeAdjustPolicy() const;
0097 void setSizeAdjustPolicy(SizeAdjustPolicy policy);
0098 int minimumContentsLength() const;
0099 void setMinimumContentsLength(int characters);
0100 QSize iconSize() const;
0101 void setIconSize(const QSize &size);
0102
0103 void setPlaceholderText(const QString &placeholderText);
0104 QString placeholderText() const;
0105
0106 bool isEditable() const;
0107 void setEditable(bool editable);
0108 void setLineEdit(QLineEdit *edit);
0109 QLineEdit *lineEdit() const;
0110 #ifndef QT_NO_VALIDATOR
0111 void setValidator(const QValidator *v);
0112 const QValidator *validator() const;
0113 #endif
0114
0115 #if QT_CONFIG(completer)
0116 void setCompleter(QCompleter *c);
0117 QCompleter *completer() const;
0118 #endif
0119
0120 QAbstractItemDelegate *itemDelegate() const;
0121 void setItemDelegate(QAbstractItemDelegate *delegate);
0122
0123 QAbstractItemModel *model() const;
0124 virtual void setModel(QAbstractItemModel *model);
0125
0126 QModelIndex rootModelIndex() const;
0127 void setRootModelIndex(const QModelIndex &index);
0128
0129 int modelColumn() const;
0130 void setModelColumn(int visibleColumn);
0131
0132 LabelDrawingMode labelDrawingMode() const;
0133 void setLabelDrawingMode(LabelDrawingMode labelDrawing);
0134
0135 int currentIndex() const;
0136 QString currentText() const;
0137 QVariant currentData(int role = Qt::UserRole) const;
0138
0139 QString itemText(int index) const;
0140 QIcon itemIcon(int index) const;
0141 QVariant itemData(int index, int role = Qt::UserRole) const;
0142
0143 inline void addItem(const QString &text, const QVariant &userData = QVariant());
0144 inline void addItem(const QIcon &icon, const QString &text,
0145 const QVariant &userData = QVariant());
0146 inline void addItems(const QStringList &texts)
0147 { insertItems(count(), texts); }
0148
0149 inline void insertItem(int index, const QString &text, const QVariant &userData = QVariant());
0150 void insertItem(int index, const QIcon &icon, const QString &text,
0151 const QVariant &userData = QVariant());
0152 void insertItems(int index, const QStringList &texts);
0153 void insertSeparator(int index);
0154
0155 void removeItem(int index);
0156
0157 void setItemText(int index, const QString &text);
0158 void setItemIcon(int index, const QIcon &icon);
0159 void setItemData(int index, const QVariant &value, int role = Qt::UserRole);
0160
0161 QAbstractItemView *view() const;
0162 void setView(QAbstractItemView *itemView);
0163
0164 QSize sizeHint() const override;
0165 QSize minimumSizeHint() const override;
0166
0167 virtual void showPopup();
0168 virtual void hidePopup();
0169
0170 bool event(QEvent *event) override;
0171 QVariant inputMethodQuery(Qt::InputMethodQuery) const override;
0172 Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, const QVariant &argument) const;
0173
0174 public Q_SLOTS:
0175 void clear();
0176 void clearEditText();
0177 void setEditText(const QString &text);
0178 void setCurrentIndex(int index);
0179 void setCurrentText(const QString &text);
0180
0181 Q_SIGNALS:
0182 void editTextChanged(const QString &);
0183 void activated(int index);
0184 void textActivated(const QString &);
0185 void highlighted(int index);
0186 void textHighlighted(const QString &);
0187 void currentIndexChanged(int index);
0188 void currentTextChanged(const QString &);
0189
0190 protected:
0191 void focusInEvent(QFocusEvent *e) override;
0192 void focusOutEvent(QFocusEvent *e) override;
0193 void changeEvent(QEvent *e) override;
0194 void resizeEvent(QResizeEvent *e) override;
0195 void paintEvent(QPaintEvent *e) override;
0196 void showEvent(QShowEvent *e) override;
0197 void hideEvent(QHideEvent *e) override;
0198 void mousePressEvent(QMouseEvent *e) override;
0199 void mouseReleaseEvent(QMouseEvent *e) override;
0200 void keyPressEvent(QKeyEvent *e) override;
0201 void keyReleaseEvent(QKeyEvent *e) override;
0202 #if QT_CONFIG(wheelevent)
0203 void wheelEvent(QWheelEvent *e) override;
0204 #endif
0205 #ifndef QT_NO_CONTEXTMENU
0206 void contextMenuEvent(QContextMenuEvent *e) override;
0207 #endif
0208 void inputMethodEvent(QInputMethodEvent *) override;
0209 virtual void initStyleOption(QStyleOptionComboBox *option) const;
0210
0211
0212 protected:
0213 QComboBox(QComboBoxPrivate &, QWidget *);
0214
0215 private:
0216 Q_DECLARE_PRIVATE(QComboBox)
0217 Q_DISABLE_COPY(QComboBox)
0218 };
0219
0220 inline void QComboBox::addItem(const QString &atext, const QVariant &auserData)
0221 { insertItem(count(), atext, auserData); }
0222 inline void QComboBox::addItem(const QIcon &aicon, const QString &atext,
0223 const QVariant &auserData)
0224 { insertItem(count(), aicon, atext, auserData); }
0225
0226 inline void QComboBox::insertItem(int aindex, const QString &atext,
0227 const QVariant &auserData)
0228 { insertItem(aindex, QIcon(), atext, auserData); }
0229
0230 QT_END_NAMESPACE
0231
0232 #endif