65 explicit QComboBoxPrivateScroller(QAbstractSlider::SliderAction action, QWidget *parent);
66 ~QComboBoxPrivateScroller() override;
68 QSize sizeHint()
const override;
74 void enterEvent(QEnterEvent *) override;
75 void leaveEvent(QEvent *) override;
76 void timerEvent(QTimerEvent *e) override;
77 void hideEvent(QHideEvent *) override;
78 void mouseMoveEvent(QMouseEvent *e) override;
79 void paintEvent(QPaintEvent *) override;
82 void doScroll(
int action);
85 QAbstractSlider::SliderAction sliderAction;
95 QComboBoxPrivateContainer(QAbstractItemView *itemView, QComboBox *parent);
96 ~QComboBoxPrivateContainer();
97 QAbstractItemView *itemView()
const;
98 void setItemView(QAbstractItemView *itemView);
100 int topMargin()
const;
101 int bottomMargin()
const {
return topMargin(); }
102 void updateTopBottomMargin();
103 void updateStyleSettings();
105 QTimer blockMouseReleaseTimer;
106 QBasicTimer adjustSizeTimer;
107 QPoint initialClickPosition;
110 void scrollItemView(
int action);
111 void hideScrollers();
112 void updateScrollers();
113 void viewDestroyed();
116 void changeEvent(QEvent *e) override;
117 bool eventFilter(QObject *o, QEvent *e) override;
118 void mousePressEvent(QMouseEvent *e) override;
119 void mouseReleaseEvent(QMouseEvent *e) override;
120 void showEvent(QShowEvent *e) override;
121 void hideEvent(QHideEvent *e) override;
122 void timerEvent(QTimerEvent *timerEvent) override;
123 void resizeEvent(QResizeEvent *e) override;
124 void paintEvent(QPaintEvent *e) override;
125 QStyleOptionComboBox comboStyleOption()
const;
128 void itemSelected(
const QModelIndex &);
133 QAbstractItemView *view =
nullptr;
134 QComboBoxPrivateScroller *top =
nullptr;
135 QComboBoxPrivateScroller *bottom =
nullptr;
136 QElapsedTimer popupTimer;
137 bool maybeIgnoreMouseButtonRelease =
false;
139 friend class QComboBox;
140 friend class QComboBoxPrivate;
147 explicit QComboMenuDelegate(QObject *parent, QComboBox *cmb);
148 ~QComboMenuDelegate() override;
151 void paint(QPainter *painter,
152 const QStyleOptionViewItem &option,
153 const QModelIndex &index)
const override;
154 QSize sizeHint(
const QStyleOptionViewItem &option,
155 const QModelIndex &index)
const override;
156 bool editorEvent(QEvent *event, QAbstractItemModel *model,
157 const QStyleOptionViewItem &option,
const QModelIndex &index) override;
160 QStyleOptionMenuItem getStyleOption(
const QStyleOptionViewItem &option,
161 const QModelIndex &index)
const;
170 explicit QComboBoxDelegate(QObject *parent, QComboBox *cmb);
171 ~QComboBoxDelegate() override;
173 static bool isSeparator(
const QModelIndex &index);
174 static void setSeparator(QAbstractItemModel *model,
const QModelIndex &index);
177 void paint(QPainter *painter,
178 const QStyleOptionViewItem &option,
179 const QModelIndex &index)
const override;
181 QSize sizeHint(
const QStyleOptionViewItem &option,
182 const QModelIndex &index)
const override;
189 Q_DECLARE_PUBLIC(QComboBox)
194 QComboBoxPrivateContainer* viewContainer();
195 void updateLineEditGeometry();
196 Qt::MatchFlags matchFlags()
const;
197 void editingFinished();
198 void returnPressed();
200 void itemSelected(
const QModelIndex &item);
201 bool contains(
const QString &text,
int role);
202 void emitActivated(
const QModelIndex &index);
203 void emitHighlighted(
const QModelIndex &index);
204 void emitCurrentIndexChanged(
const QModelIndex &index);
205 void modelDestroyed();
207 void updateMicroFocus() { q_func()->updateMicroFocus(); }
208#if QT_CONFIG(completer)
209 void completerActivated(
const QModelIndex &index);
212 void dataChanged(
const QModelIndex &topLeft,
const QModelIndex &bottomRight);
213 void updateIndexBeforeChange();
214 void rowsInserted(
const QModelIndex &parent,
int start,
int end);
215 void rowsRemoved(
const QModelIndex &parent,
int start,
int end);
216 void updateArrow(QStyle::StateFlag state);
217 bool updateHoverControl(
const QPoint &pos);
218 void trySetValidIndex();
219 QRect popupGeometry(
const QPoint &globalPos)
const;
220 QStyle::SubControl newHoverControl(
const QPoint &pos);
221 int computeWidthHint()
const;
222 QSize recomputeSizeHint(QSize &sh)
const;
223 void adjustComboBoxSize();
224 QString itemText(
const QModelIndex &index)
const;
225 QIcon itemIcon(
const QModelIndex &index)
const;
226 int itemRole()
const;
227 void updateLayoutDirection();
228 void setCurrentIndex(
const QModelIndex &index);
229 void updateDelegate(
bool force =
false);
230 void initViewItemOption(QStyleOptionViewItem *option)
const;
231 void keyboardSearchString(
const QString &text);
233 void updateViewContainerPaletteAndOpacity();
234 void updateFocusPolicy();
235 void showPopupFromMouseEvent(QMouseEvent *e);
237 void updateCurrentText(
const QString &text);
239 void disconnectModel();
242 void cleanupNativePopup();
243 bool showNativePopup();
248 void operator()(
void)
250 cb->setCurrentIndex(index);
251 cb->d_func()->emitActivated(cb->d_func()->currentIndex);
256 std::array<QMetaObject::Connection, 8> modelConnections;
257 QAbstractItemModel *model =
nullptr;
258 QLineEdit *lineEdit =
nullptr;
259 QPointer<QComboBoxPrivateContainer> container;
261 QPlatformMenu *m_platformMenu =
nullptr;
263 QPersistentModelIndex currentIndex;
264 QPersistentModelIndex root;
265 QString placeholderText;
269 mutable QSize minimumSizeHint;
270 mutable QSize sizeHint;
271 QComboBox::InsertPolicy insertPolicy = QComboBox::InsertAtBottom;
272 QComboBox::SizeAdjustPolicy sizeAdjustPolicy = QComboBox::AdjustToContentsOnFirstShow;
273 QStyle::StateFlag arrowState = QStyle::State_None;
274 QStyle::SubControl hoverControl = QStyle::SC_None;
275 QComboBox::LabelDrawingMode labelDrawingMode = QComboBox::LabelDrawingMode::UseStyle;
276 int minimumContentsLength = 0;
277 int indexBeforeChange = -1;
278 int maxVisibleItems = 10;
279 int maxCount = (std::numeric_limits<
int>::max)();
281 int placeholderIndex = -1;
283 bool duplicatesEnabled : 1;
286 bool hidingPopup : 1;