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