QComboBox: new signal currentTextChanged
Adds NOTIFY to currentText property. Test included. Change-Id: I3e92b585ad6697891d61537c82f6ab9e8beb1a00 Reviewed-by: Andy Shaw <andy.shaw@digia.com> Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
This commit is contained in:
parent
84787d82ee
commit
5bddaf76e0
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -116,6 +116,8 @@ private slots:
|
||||
void insertOnCurrentIndex();
|
||||
void textpixmapdata_data();
|
||||
void textpixmapdata();
|
||||
void currentTextChanged_data();
|
||||
void currentTextChanged();
|
||||
void editTextChanged();
|
||||
void setModel();
|
||||
void modelDeleted();
|
||||
@ -1408,6 +1410,59 @@ void tst_QComboBox::setCurrentText()
|
||||
#endif
|
||||
}
|
||||
|
||||
void tst_QComboBox::currentTextChanged_data()
|
||||
{
|
||||
QTest::addColumn<bool>("editable");
|
||||
QTest::newRow("editable") << true;
|
||||
QTest::newRow("not editable") << false;
|
||||
}
|
||||
|
||||
void tst_QComboBox::currentTextChanged()
|
||||
{
|
||||
QFETCH(bool, editable);
|
||||
|
||||
QCOMPARE(testWidget->count(), 0);
|
||||
testWidget->addItems(QStringList() << "foo" << "bar");
|
||||
QCOMPARE(testWidget->count(), 2);
|
||||
|
||||
QSignalSpy spy(testWidget, SIGNAL(currentTextChanged(QString)));
|
||||
|
||||
testWidget->setEditable(editable);
|
||||
|
||||
// set text in list
|
||||
testWidget->setCurrentIndex(0);
|
||||
QCOMPARE(testWidget->currentIndex(), 0);
|
||||
spy.clear();
|
||||
testWidget->setCurrentText(QString("bar"));
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("bar"));
|
||||
|
||||
// set text not in list
|
||||
testWidget->setCurrentIndex(0);
|
||||
QCOMPARE(testWidget->currentIndex(), 0);
|
||||
spy.clear();
|
||||
testWidget->setCurrentText(QString("qt"));
|
||||
if (editable) {
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("qt"));
|
||||
} else {
|
||||
QCOMPARE(spy.count(), 0);
|
||||
}
|
||||
|
||||
// item changed
|
||||
testWidget->setCurrentIndex(0);
|
||||
QCOMPARE(testWidget->currentIndex(), 0);
|
||||
spy.clear();
|
||||
testWidget->setItemText(0, QString("ape"));
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("ape"));
|
||||
// change it back
|
||||
spy.clear();
|
||||
testWidget->setItemText(0, QString("foo"));
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("foo"));
|
||||
}
|
||||
|
||||
void tst_QComboBox::editTextChanged()
|
||||
{
|
||||
QCOMPARE(testWidget->count(), 0);
|
||||
|
Loading…
Reference in New Issue
Block a user