QComboBox: Remove deprecated auto-completion properties
The replacement is to set, and configure, a QCompleter directly via setCompleter. With the removal of the separate properties in QComboBox, the configuration of the completer is not maintained if the line edit is replaced. A QCompleter is created and set implicitly when the line edit is set, unless the line edit came with a completer. This is what the auto test verifies as well. Change-Id: I9a4c73db5e39a2558aad346c0904be6deb4f1cd2 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This commit is contained in:
parent
55b470e411
commit
d39fefc0eb
@ -92,7 +92,6 @@ QT_BEGIN_NAMESPACE
|
|||||||
QComboBoxPrivate::QComboBoxPrivate()
|
QComboBoxPrivate::QComboBoxPrivate()
|
||||||
: QWidgetPrivate(),
|
: QWidgetPrivate(),
|
||||||
shownOnce(false),
|
shownOnce(false),
|
||||||
autoCompletion(true),
|
|
||||||
duplicatesEnabled(false),
|
duplicatesEnabled(false),
|
||||||
frame(true),
|
frame(true),
|
||||||
inserting(false)
|
inserting(false)
|
||||||
@ -1518,105 +1517,6 @@ int QComboBox::maxCount() const
|
|||||||
return d->maxCount;
|
return d->maxCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if QT_CONFIG(completer)
|
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\property QComboBox::autoCompletion
|
|
||||||
\brief whether the combobox provides auto-completion for editable items
|
|
||||||
\since 4.1
|
|
||||||
\obsolete
|
|
||||||
|
|
||||||
Use setCompleter() instead.
|
|
||||||
|
|
||||||
By default, this property is \c true.
|
|
||||||
|
|
||||||
\sa editable
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\obsolete
|
|
||||||
|
|
||||||
Use completer() instead.
|
|
||||||
*/
|
|
||||||
bool QComboBox::autoCompletion() const
|
|
||||||
{
|
|
||||||
Q_D(const QComboBox);
|
|
||||||
return d->autoCompletion;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\obsolete
|
|
||||||
|
|
||||||
Use setCompleter() instead.
|
|
||||||
*/
|
|
||||||
void QComboBox::setAutoCompletion(bool enable)
|
|
||||||
{
|
|
||||||
Q_D(QComboBox);
|
|
||||||
|
|
||||||
#ifdef QT_KEYPAD_NAVIGATION
|
|
||||||
if (Q_UNLIKELY(QApplicationPrivate::keypadNavigationEnabled() && !enable && isEditable()))
|
|
||||||
qWarning("QComboBox::setAutoCompletion: auto completion is mandatory when combo box editable");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
d->autoCompletion = enable;
|
|
||||||
if (!d->lineEdit)
|
|
||||||
return;
|
|
||||||
if (enable) {
|
|
||||||
if (d->lineEdit->completer())
|
|
||||||
return;
|
|
||||||
d->completer = new QCompleter(d->model, d->lineEdit);
|
|
||||||
connect(d->completer, SIGNAL(activated(QModelIndex)), this, SLOT(_q_completerActivated(QModelIndex)));
|
|
||||||
d->completer->setCaseSensitivity(d->autoCompletionCaseSensitivity);
|
|
||||||
d->completer->setCompletionMode(QCompleter::InlineCompletion);
|
|
||||||
d->completer->setCompletionColumn(d->modelColumn);
|
|
||||||
d->lineEdit->setCompleter(d->completer);
|
|
||||||
d->completer->setWidget(this);
|
|
||||||
} else {
|
|
||||||
d->lineEdit->setCompleter(nullptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\property QComboBox::autoCompletionCaseSensitivity
|
|
||||||
\brief whether string comparisons are case-sensitive or case-insensitive for auto-completion
|
|
||||||
\obsolete
|
|
||||||
|
|
||||||
By default, this property is Qt::CaseInsensitive.
|
|
||||||
|
|
||||||
Use setCompleter() instead. Case sensitivity of the auto completion can be
|
|
||||||
changed using QCompleter::setCaseSensitivity().
|
|
||||||
|
|
||||||
\sa autoCompletion
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\obsolete
|
|
||||||
|
|
||||||
Use setCompleter() and QCompleter::setCaseSensitivity() instead.
|
|
||||||
*/
|
|
||||||
Qt::CaseSensitivity QComboBox::autoCompletionCaseSensitivity() const
|
|
||||||
{
|
|
||||||
Q_D(const QComboBox);
|
|
||||||
return d->autoCompletionCaseSensitivity;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
\obsolete
|
|
||||||
|
|
||||||
Use setCompleter() and QCompleter::setCaseSensitivity() instead.
|
|
||||||
*/
|
|
||||||
void QComboBox::setAutoCompletionCaseSensitivity(Qt::CaseSensitivity sensitivity)
|
|
||||||
{
|
|
||||||
Q_D(QComboBox);
|
|
||||||
d->autoCompletionCaseSensitivity = sensitivity;
|
|
||||||
if (d->lineEdit && d->lineEdit->completer())
|
|
||||||
d->lineEdit->completer()->setCaseSensitivity(sensitivity);
|
|
||||||
}
|
|
||||||
#endif // QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
|
|
||||||
#endif // QT_CONFIG(completer)
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\property QComboBox::duplicatesEnabled
|
\property QComboBox::duplicatesEnabled
|
||||||
\brief whether the user can enter duplicate items into the combobox
|
\brief whether the user can enter duplicate items into the combobox
|
||||||
@ -1902,6 +1802,9 @@ void QComboBox::setEditable(bool editable)
|
|||||||
Sets the line \a edit to use instead of the current line edit widget.
|
Sets the line \a edit to use instead of the current line edit widget.
|
||||||
|
|
||||||
The combo box takes ownership of the line edit.
|
The combo box takes ownership of the line edit.
|
||||||
|
|
||||||
|
\note Since the combobox's line edit owns the QCompleter, any previous
|
||||||
|
call to setCompleter() will no longer have any effect.
|
||||||
*/
|
*/
|
||||||
void QComboBox::setLineEdit(QLineEdit *edit)
|
void QComboBox::setLineEdit(QLineEdit *edit)
|
||||||
{
|
{
|
||||||
@ -1935,27 +1838,24 @@ void QComboBox::setLineEdit(QLineEdit *edit)
|
|||||||
d->updateFocusPolicy();
|
d->updateFocusPolicy();
|
||||||
d->lineEdit->setFocusProxy(this);
|
d->lineEdit->setFocusProxy(this);
|
||||||
d->lineEdit->setAttribute(Qt::WA_MacShowFocusRect, false);
|
d->lineEdit->setAttribute(Qt::WA_MacShowFocusRect, false);
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
QT_WARNING_PUSH
|
// create a default completer
|
||||||
QT_WARNING_DISABLE_DEPRECATED
|
if (!d->lineEdit->completer()) {
|
||||||
#if QT_CONFIG(completer)
|
QCompleter *completer = new QCompleter(d->model, d->lineEdit);
|
||||||
setAutoCompletion(d->autoCompletion);
|
completer->setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
|
completer->setCompletionMode(QCompleter::InlineCompletion);
|
||||||
|
completer->setCompletionColumn(d->modelColumn);
|
||||||
|
|
||||||
#ifdef QT_KEYPAD_NAVIGATION
|
#ifdef QT_KEYPAD_NAVIGATION
|
||||||
if (QApplicationPrivate::keypadNavigationEnabled()) {
|
|
||||||
// Editable combo boxes will have a completer that is set to UnfilteredPopupCompletion.
|
// Editable combo boxes will have a completer that is set to UnfilteredPopupCompletion.
|
||||||
// This means that when the user enters edit mode they are immediately presented with a
|
// This means that when the user enters edit mode they are immediately presented with a
|
||||||
// list of possible completions.
|
// list of possible completions.
|
||||||
setAutoCompletion(true);
|
if (QApplicationPrivate::keypadNavigationEnabled())
|
||||||
if (d->completer) {
|
completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
|
||||||
d->completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
|
#endif
|
||||||
connect(d->completer, SIGNAL(activated(QModelIndex)), this, SLOT(_q_completerActivated()));
|
// sets up connections
|
||||||
}
|
setCompleter(completer);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
QT_WARNING_POP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
setAttribute(Qt::WA_InputMethodEnabled);
|
setAttribute(Qt::WA_InputMethodEnabled);
|
||||||
d->updateLayoutDirection();
|
d->updateLayoutDirection();
|
||||||
@ -2019,7 +1919,8 @@ const QValidator *QComboBox::validator() const
|
|||||||
By default, for an editable combo box, a QCompleter that
|
By default, for an editable combo box, a QCompleter that
|
||||||
performs case insensitive inline completion is automatically created.
|
performs case insensitive inline completion is automatically created.
|
||||||
|
|
||||||
\note The completer is removed when the \l editable property becomes \c false.
|
\note The completer is removed when the \l editable property becomes \c false,
|
||||||
|
or when the line edit is replaced by a call to setLineEdit().
|
||||||
Setting a completer on a QComboBox that is not editable will be ignored.
|
Setting a completer on a QComboBox that is not editable will be ignored.
|
||||||
*/
|
*/
|
||||||
void QComboBox::setCompleter(QCompleter *c)
|
void QComboBox::setCompleter(QCompleter *c)
|
||||||
@ -2104,7 +2005,10 @@ QAbstractItemModel *QComboBox::model() const
|
|||||||
Sets the model to be \a model. \a model must not be \nullptr.
|
Sets the model to be \a model. \a model must not be \nullptr.
|
||||||
If you want to clear the contents of a model, call clear().
|
If you want to clear the contents of a model, call clear().
|
||||||
|
|
||||||
\sa clear()
|
\note If the combobox is editable, then the \a model will also be
|
||||||
|
set on the completer of the line edit.
|
||||||
|
|
||||||
|
\sa clear() setCompleter()
|
||||||
*/
|
*/
|
||||||
void QComboBox::setModel(QAbstractItemModel *model)
|
void QComboBox::setModel(QAbstractItemModel *model)
|
||||||
{
|
{
|
||||||
@ -2119,8 +2023,7 @@ void QComboBox::setModel(QAbstractItemModel *model)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
#if QT_CONFIG(completer)
|
#if QT_CONFIG(completer)
|
||||||
if (d->lineEdit && d->lineEdit->completer()
|
if (d->lineEdit && d->lineEdit->completer())
|
||||||
&& d->lineEdit->completer() == d->completer)
|
|
||||||
d->lineEdit->completer()->setModel(model);
|
d->lineEdit->completer()->setModel(model);
|
||||||
#endif
|
#endif
|
||||||
if (d->model) {
|
if (d->model) {
|
||||||
@ -3579,6 +3482,9 @@ void QComboBox::setFrame(bool enable)
|
|||||||
default value).
|
default value).
|
||||||
|
|
||||||
By default, this property has a value of 0.
|
By default, this property has a value of 0.
|
||||||
|
|
||||||
|
\note In an editable combobox, the visible column will also become
|
||||||
|
the \l{QCompleter::completionColumn}{completion column}.
|
||||||
*/
|
*/
|
||||||
int QComboBox::modelColumn() const
|
int QComboBox::modelColumn() const
|
||||||
{
|
{
|
||||||
@ -3594,8 +3500,7 @@ void QComboBox::setModelColumn(int visibleColumn)
|
|||||||
if (lv)
|
if (lv)
|
||||||
lv->setModelColumn(visibleColumn);
|
lv->setModelColumn(visibleColumn);
|
||||||
#if QT_CONFIG(completer)
|
#if QT_CONFIG(completer)
|
||||||
if (d->lineEdit && d->lineEdit->completer()
|
if (d->lineEdit && d->lineEdit->completer())
|
||||||
&& d->lineEdit->completer() == d->completer)
|
|
||||||
d->lineEdit->completer()->setCompletionColumn(visibleColumn);
|
d->lineEdit->completer()->setCompletionColumn(visibleColumn);
|
||||||
#endif
|
#endif
|
||||||
setCurrentIndex(currentIndex()); //update the text to the text of the new column;
|
setCurrentIndex(currentIndex()); //update the text to the text of the new column;
|
||||||
|
@ -72,14 +72,6 @@ class Q_WIDGETS_EXPORT QComboBox : public QWidget
|
|||||||
Q_PROPERTY(int minimumContentsLength READ minimumContentsLength WRITE setMinimumContentsLength)
|
Q_PROPERTY(int minimumContentsLength READ minimumContentsLength WRITE setMinimumContentsLength)
|
||||||
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
|
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
|
||||||
Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
|
Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
|
||||||
|
|
||||||
#if QT_CONFIG(completer)
|
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
Q_PROPERTY(bool autoCompletion READ autoCompletion WRITE setAutoCompletion DESIGNABLE false)
|
|
||||||
Q_PROPERTY(Qt::CaseSensitivity autoCompletionCaseSensitivity READ autoCompletionCaseSensitivity WRITE setAutoCompletionCaseSensitivity DESIGNABLE false)
|
|
||||||
#endif
|
|
||||||
#endif // QT_CONFIG(completer)
|
|
||||||
|
|
||||||
Q_PROPERTY(bool duplicatesEnabled READ duplicatesEnabled WRITE setDuplicatesEnabled)
|
Q_PROPERTY(bool duplicatesEnabled READ duplicatesEnabled WRITE setDuplicatesEnabled)
|
||||||
Q_PROPERTY(bool frame READ hasFrame WRITE setFrame)
|
Q_PROPERTY(bool frame READ hasFrame WRITE setFrame)
|
||||||
Q_PROPERTY(int modelColumn READ modelColumn WRITE setModelColumn)
|
Q_PROPERTY(int modelColumn READ modelColumn WRITE setModelColumn)
|
||||||
@ -95,19 +87,6 @@ public:
|
|||||||
void setMaxCount(int max);
|
void setMaxCount(int max);
|
||||||
int maxCount() const;
|
int maxCount() const;
|
||||||
|
|
||||||
#if QT_CONFIG(completer)
|
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
QT_DEPRECATED_X("Use completer() instead.")
|
|
||||||
bool autoCompletion() const;
|
|
||||||
QT_DEPRECATED_X("Use setCompleter() instead.")
|
|
||||||
void setAutoCompletion(bool enable);
|
|
||||||
QT_DEPRECATED_X("Use completer()->caseSensitivity() instead.")
|
|
||||||
Qt::CaseSensitivity autoCompletionCaseSensitivity() const;
|
|
||||||
QT_DEPRECATED_X("Use completer()->setCaseSensitivity() instead.")
|
|
||||||
void setAutoCompletionCaseSensitivity(Qt::CaseSensitivity sensitivity);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool duplicatesEnabled() const;
|
bool duplicatesEnabled() const;
|
||||||
void setDuplicatesEnabled(bool enable);
|
void setDuplicatesEnabled(bool enable);
|
||||||
|
|
||||||
|
@ -409,9 +409,6 @@ public:
|
|||||||
QComboBoxPrivateContainer *container = nullptr;
|
QComboBoxPrivateContainer *container = nullptr;
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
QPlatformMenu *m_platformMenu = nullptr;
|
QPlatformMenu *m_platformMenu = nullptr;
|
||||||
#endif
|
|
||||||
#if QT_CONFIG(completer)
|
|
||||||
QPointer<QCompleter> completer;
|
|
||||||
#endif
|
#endif
|
||||||
QPersistentModelIndex currentIndex;
|
QPersistentModelIndex currentIndex;
|
||||||
QPersistentModelIndex root;
|
QPersistentModelIndex root;
|
||||||
@ -424,7 +421,6 @@ public:
|
|||||||
QComboBox::SizeAdjustPolicy sizeAdjustPolicy = QComboBox::AdjustToContentsOnFirstShow;
|
QComboBox::SizeAdjustPolicy sizeAdjustPolicy = QComboBox::AdjustToContentsOnFirstShow;
|
||||||
QStyle::StateFlag arrowState = QStyle::State_None;
|
QStyle::StateFlag arrowState = QStyle::State_None;
|
||||||
QStyle::SubControl hoverControl = QStyle::SC_None;
|
QStyle::SubControl hoverControl = QStyle::SC_None;
|
||||||
Qt::CaseSensitivity autoCompletionCaseSensitivity = Qt::CaseInsensitive;
|
|
||||||
int minimumContentsLength = 0;
|
int minimumContentsLength = 0;
|
||||||
int indexBeforeChange = -1;
|
int indexBeforeChange = -1;
|
||||||
int maxVisibleItems = 10;
|
int maxVisibleItems = 10;
|
||||||
@ -432,7 +428,6 @@ public:
|
|||||||
int modelColumn = 0;
|
int modelColumn = 0;
|
||||||
int placeholderIndex = -1;
|
int placeholderIndex = -1;
|
||||||
bool shownOnce : 1;
|
bool shownOnce : 1;
|
||||||
bool autoCompletion : 1;
|
|
||||||
bool duplicatesEnabled : 1;
|
bool duplicatesEnabled : 1;
|
||||||
bool frame : 1;
|
bool frame : 1;
|
||||||
bool inserting : 1;
|
bool inserting : 1;
|
||||||
|
@ -263,15 +263,6 @@ void tst_QComboBox::getSetCheck()
|
|||||||
obj1.setCompleter(&completer);
|
obj1.setCompleter(&completer);
|
||||||
QVERIFY(obj1.completer() == nullptr); // no QLineEdit is set
|
QVERIFY(obj1.completer() == nullptr); // no QLineEdit is set
|
||||||
|
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
// bool QComboBox::autoCompletion()
|
|
||||||
// void QComboBox::setAutoCompletion(bool)
|
|
||||||
obj1.setAutoCompletion(false);
|
|
||||||
QCOMPARE(false, obj1.autoCompletion());
|
|
||||||
obj1.setAutoCompletion(true);
|
|
||||||
QCOMPARE(true, obj1.autoCompletion());
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// bool QComboBox::duplicatesEnabled()
|
// bool QComboBox::duplicatesEnabled()
|
||||||
// void QComboBox::setDuplicatesEnabled(bool)
|
// void QComboBox::setDuplicatesEnabled(bool)
|
||||||
obj1.setDuplicatesEnabled(false);
|
obj1.setDuplicatesEnabled(false);
|
||||||
@ -805,9 +796,6 @@ void tst_QComboBox::virtualAutocompletion()
|
|||||||
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
|
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
|
||||||
QComboBox *testWidget = topLevel.comboBox();
|
QComboBox *testWidget = topLevel.comboBox();
|
||||||
testWidget->clear();
|
testWidget->clear();
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
testWidget->setAutoCompletion(true);
|
|
||||||
#endif
|
|
||||||
testWidget->addItem("Foo");
|
testWidget->addItem("Foo");
|
||||||
testWidget->addItem("Bar");
|
testWidget->addItem("Bar");
|
||||||
testWidget->addItem("Boat");
|
testWidget->addItem("Boat");
|
||||||
@ -870,9 +858,6 @@ void tst_QComboBox::autoCompletionCaseSensitivity()
|
|||||||
QCOMPARE(qApp->focusWidget(), (QWidget *)testWidget);
|
QCOMPARE(qApp->focusWidget(), (QWidget *)testWidget);
|
||||||
|
|
||||||
testWidget->clear();
|
testWidget->clear();
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
testWidget->setAutoCompletion(true);
|
|
||||||
#endif
|
|
||||||
testWidget->addItem("Cow");
|
testWidget->addItem("Cow");
|
||||||
testWidget->addItem("irrelevant1");
|
testWidget->addItem("irrelevant1");
|
||||||
testWidget->addItem("aww");
|
testWidget->addItem("aww");
|
||||||
@ -3093,9 +3078,6 @@ void tst_QComboBox::task_QTBUG_31146_popupCompletion()
|
|||||||
|
|
||||||
QComboBox comboBox;
|
QComboBox comboBox;
|
||||||
comboBox.setEditable(true);
|
comboBox.setEditable(true);
|
||||||
#if QT_DEPRECATED_SINCE(5, 13)
|
|
||||||
comboBox.setAutoCompletion(true);
|
|
||||||
#endif
|
|
||||||
comboBox.setInsertPolicy(QComboBox::NoInsert);
|
comboBox.setInsertPolicy(QComboBox::NoInsert);
|
||||||
comboBox.completer()->setCaseSensitivity(Qt::CaseInsensitive);
|
comboBox.completer()->setCaseSensitivity(Qt::CaseInsensitive);
|
||||||
comboBox.completer()->setCompletionMode(QCompleter::PopupCompletion);
|
comboBox.completer()->setCompletionMode(QCompleter::PopupCompletion);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user