From 5bddaf76e027a4688a9f26a6a6b3fa80e0903cb7 Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Sat, 13 Oct 2012 15:08:11 +0200 Subject: QComboBox: new signal currentTextChanged Adds NOTIFY to currentText property. Test included. Change-Id: I3e92b585ad6697891d61537c82f6ab9e8beb1a00 Reviewed-by: Andy Shaw Reviewed-by: Konstantin Ritt Reviewed-by: Stephen Kelly --- src/widgets/widgets/qcombobox.cpp | 20 ++++++++++++++++++-- src/widgets/widgets/qcombobox.h | 3 ++- 2 files changed, 20 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp index 27fc3f9015..ef908d62c6 100644 --- a/src/widgets/widgets/qcombobox.cpp +++ b/src/widgets/widgets/qcombobox.cpp @@ -821,6 +821,14 @@ QStyleOptionComboBox QComboBoxPrivateContainer::comboStyleOption() const item's \a text is passed. */ +/*! + \fn void QComboBox::currentTextChanged(const QString &text) + \since 5.0 + + This signal is sent whenever currentText changes. The new value + is passed as \a text. +*/ + /*! Constructs a combobox with the given \a parent, using the default model QStandardItemModel. @@ -980,9 +988,12 @@ void QComboBoxPrivate::_q_dataChanged(const QModelIndex &topLeft, const QModelIn } if (currentIndex.row() >= topLeft.row() && currentIndex.row() <= bottomRight.row()) { + const QString text = q->itemText(currentIndex.row()); if (lineEdit) { - lineEdit->setText(q->itemText(currentIndex.row())); + lineEdit->setText(text); updateLineEditGeometry(); + } else { + emit q->currentTextChanged(text); } q->update(); } @@ -1242,7 +1253,11 @@ void QComboBoxPrivate::_q_emitCurrentIndexChanged(const QModelIndex &index) { Q_Q(QComboBox); emit q->currentIndexChanged(index.row()); - emit q->currentIndexChanged(itemText(index)); + const QString text = itemText(index); + emit q->currentIndexChanged(text); + // signal lineEdit.textChanged already connected to signal currentTextChanged, so don't emit double here + if (!lineEdit) + emit q->currentTextChanged(text); #ifndef QT_NO_ACCESSIBILITY QAccessibleEvent event(q, QAccessible::NameChanged); QAccessible::updateAccessibility(&event); @@ -1714,6 +1729,7 @@ void QComboBox::setLineEdit(QLineEdit *edit) connect(d->lineEdit, SIGNAL(returnPressed()), this, SLOT(_q_returnPressed())); connect(d->lineEdit, SIGNAL(editingFinished()), this, SLOT(_q_editingFinished())); connect(d->lineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(editTextChanged(QString))); + connect(d->lineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(currentTextChanged(QString))); d->lineEdit->setFrame(false); d->lineEdit->setContextMenuPolicy(Qt::NoContextMenu); d->lineEdit->setFocusProxy(this); diff --git a/src/widgets/widgets/qcombobox.h b/src/widgets/widgets/qcombobox.h index 1d0e892fd8..bce6c98f2c 100644 --- a/src/widgets/widgets/qcombobox.h +++ b/src/widgets/widgets/qcombobox.h @@ -66,7 +66,7 @@ class Q_WIDGETS_EXPORT QComboBox : public QWidget Q_ENUMS(SizeAdjustPolicy) Q_PROPERTY(bool editable READ isEditable WRITE setEditable) Q_PROPERTY(int count READ count) - Q_PROPERTY(QString currentText READ currentText WRITE setCurrentText USER true) + Q_PROPERTY(QString currentText READ currentText WRITE setCurrentText NOTIFY currentTextChanged USER true) Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems) Q_PROPERTY(int maxCount READ maxCount WRITE setMaxCount) @@ -221,6 +221,7 @@ Q_SIGNALS: void highlighted(const QString &); void currentIndexChanged(int index); void currentIndexChanged(const QString &); + void currentTextChanged(const QString &); protected: void focusInEvent(QFocusEvent *e); -- cgit v1.2.3