185 QComboBoxPrivateContainer(QAbstractItemView *itemView, QComboBox *parent);
186 ~QComboBoxPrivateContainer();
187 QAbstractItemView *itemView()
const;
188 void setItemView(QAbstractItemView *itemView);
190 int topMargin()
const;
191 int bottomMargin()
const {
return topMargin(); }
192 void updateTopBottomMargin();
193 void updateStyleSettings();
195 QTimer blockMouseReleaseTimer;
196 QBasicTimer adjustSizeTimer;
197 QPoint initialClickPosition;
200 void scrollItemView(
int action);
201 void hideScrollers();
202 void updateScrollers();
203 void viewDestroyed();
206 void changeEvent(QEvent *e) override;
207 bool eventFilter(QObject *o, QEvent *e) override;
208 void mousePressEvent(QMouseEvent *e) override;
209 void mouseReleaseEvent(QMouseEvent *e) override;
210 void showEvent(QShowEvent *e) override;
211 void hideEvent(QHideEvent *e) override;
212 void timerEvent(QTimerEvent *timerEvent) override;
213 void resizeEvent(QResizeEvent *e) override;
214 void paintEvent(QPaintEvent *e) override;
215 QStyleOptionComboBox comboStyleOption()
const;
218 void itemSelected(
const QModelIndex &);
223 QAbstractItemView *view =
nullptr;
224 QComboBoxPrivateScroller *top =
nullptr;
225 QComboBoxPrivateScroller *bottom =
nullptr;
226 QElapsedTimer popupTimer;
227 bool maybeIgnoreMouseButtonRelease =
false;
229 friend class QComboBox;
230 friend class QComboBoxPrivate;
237 QComboMenuDelegate(QObject *parent, QComboBox *cmb)
238 : QAbstractItemDelegate(parent), mCombo(cmb), pressedIndex(-1)
242 void paint(QPainter *painter,
243 const QStyleOptionViewItem &option,
244 const QModelIndex &index)
const override {
245 QStyleOptionMenuItem opt = getStyleOption(option, index);
246 painter->fillRect(option.rect, opt.palette.window());
247 mCombo->style()->drawControl(QStyle::CE_MenuItem, &opt, painter, mCombo);
249 QSize sizeHint(
const QStyleOptionViewItem &option,
250 const QModelIndex &index)
const override {
251 QStyleOptionMenuItem opt = getStyleOption(option, index);
252 return mCombo->style()->sizeFromContents(
253 QStyle::CT_MenuItem, &opt, option.rect.size(), mCombo);
255 bool editorEvent(QEvent *event, QAbstractItemModel *model,
256 const QStyleOptionViewItem &option,
const QModelIndex &index) override;
259 QStyleOptionMenuItem getStyleOption(
const QStyleOptionViewItem &option,
260 const QModelIndex &index)
const;
314 Q_DECLARE_PUBLIC(QComboBox)
319 QComboBoxPrivateContainer* viewContainer();
320 void updateLineEditGeometry();
321 Qt::MatchFlags matchFlags()
const;
322 void editingFinished();
323 void returnPressed();
325 void itemSelected(
const QModelIndex &item);
326 bool contains(
const QString &text,
int role);
327 void emitActivated(
const QModelIndex &index);
328 void emitHighlighted(
const QModelIndex &index);
329 void emitCurrentIndexChanged(
const QModelIndex &index);
330 void modelDestroyed();
332 void updateMicroFocus() { q_func()->updateMicroFocus(); }
333#if QT_CONFIG(completer)
334 void completerActivated(
const QModelIndex &index);
337 void dataChanged(
const QModelIndex &topLeft,
const QModelIndex &bottomRight);
338 void updateIndexBeforeChange();
339 void rowsInserted(
const QModelIndex &parent,
int start,
int end);
340 void rowsRemoved(
const QModelIndex &parent,
int start,
int end);
341 void updateArrow(QStyle::StateFlag state);
342 bool updateHoverControl(
const QPoint &pos);
343 void trySetValidIndex();
344 QRect popupGeometry(
const QPoint &globalPos)
const;
345 QStyle::SubControl newHoverControl(
const QPoint &pos);
346 int computeWidthHint()
const;
347 QSize recomputeSizeHint(QSize &sh)
const;
348 void adjustComboBoxSize();
349 QString itemText(
const QModelIndex &index)
const;
350 QIcon itemIcon(
const QModelIndex &index)
const;
351 int itemRole()
const;
352 void updateLayoutDirection();
353 void setCurrentIndex(
const QModelIndex &index);
354 void updateDelegate(
bool force =
false);
355 void initViewItemOption(QStyleOptionViewItem *option)
const;
356 void keyboardSearchString(
const QString &text);
358 void updateViewContainerPaletteAndOpacity();
359 void updateFocusPolicy();
360 void showPopupFromMouseEvent(QMouseEvent *e);
362 void updateCurrentText(
const QString &text);
364 void disconnectModel();
367 void cleanupNativePopup();
368 bool showNativePopup();
373 void operator()(
void)
375 cb->setCurrentIndex(index);
376 cb->d_func()->emitActivated(cb->d_func()->currentIndex);
381 std::array<QMetaObject::Connection, 8> modelConnections;
382 QAbstractItemModel *model =
nullptr;
383 QLineEdit *lineEdit =
nullptr;
384 QPointer<QComboBoxPrivateContainer> container;
386 QPlatformMenu *m_platformMenu =
nullptr;
388 QPersistentModelIndex currentIndex;
389 QPersistentModelIndex root;
390 QString placeholderText;
394 mutable QSize minimumSizeHint;
395 mutable QSize sizeHint;
396 QComboBox::InsertPolicy insertPolicy = QComboBox::InsertAtBottom;
397 QComboBox::SizeAdjustPolicy sizeAdjustPolicy = QComboBox::AdjustToContentsOnFirstShow;
398 QStyle::StateFlag arrowState = QStyle::State_None;
399 QStyle::SubControl hoverControl = QStyle::SC_None;
400 QComboBox::LabelDrawingMode labelDrawingMode = QComboBox::LabelDrawingMode::UseStyle;
401 int minimumContentsLength = 0;
402 int indexBeforeChange = -1;
403 int maxVisibleItems = 10;
404 int maxCount = (std::numeric_limits<
int>::max)();
406 int placeholderIndex = -1;
408 bool duplicatesEnabled : 1;
411 bool hidingPopup : 1;