@@ -100,6 +100,24 @@ QList<QByteArrayList> parseClipboard(QString clipboard)
100100
101101}
102102
103+ UniqueFilterModel::UniqueFilterModel (QObject* parent)
104+ : QSortFilterProxyModel(parent)
105+ {
106+ }
107+
108+ bool UniqueFilterModel::filterAcceptsRow (int sourceRow, const QModelIndex &sourceParent) const
109+ {
110+ QModelIndex index = sourceModel ()->index (sourceRow, filterKeyColumn (), sourceParent);
111+ const QString& value = index.data ().toString ();
112+
113+ if (!value.isEmpty () && !m_uniqueValues.contains (value)) {
114+ const_cast <UniqueFilterModel*>(this )->m_uniqueValues .insert (value);
115+ return true ;
116+ }
117+ else
118+ return false ;
119+
120+ }
103121
104122ExtendedTableWidgetEditorDelegate::ExtendedTableWidgetEditorDelegate (QObject* parent)
105123 : QStyledItemDelegate(parent)
@@ -111,10 +129,16 @@ QWidget* ExtendedTableWidgetEditorDelegate::createEditor(QWidget* parent, const
111129 QLineEdit* editor = new QLineEdit (parent);
112130 // If the row count is not greater than the complete threshold setting, set a completer of values based on current values in the column.
113131 if (index.model ()->rowCount () <= Settings::getValue (" databrowser" , " complete_threshold" ).toInt ()) {
114- QCompleter *completer = new QCompleter (editor);
115- completer->setModel (const_cast <QAbstractItemModel*>(index.model ()));
132+ QCompleter* completer = new QCompleter (editor);
133+ UniqueFilterModel* completerFilter = new UniqueFilterModel (completer);
134+ // Provide a filter for the source model, so only unique and non-empty values are accepted.
135+ completerFilter->setSourceModel (const_cast <QAbstractItemModel*>(index.model ()));
136+ completerFilter->setFilterKeyColumn (index.column ());
137+ completer->setModel (completerFilter);
138+ // Complete on this column, using a popup and case-insensitively.
116139 completer->setCompletionColumn (index.column ());
117- completer->setCompletionMode (QCompleter::InlineCompletion);
140+ completer->setCompletionMode (QCompleter::PopupCompletion);
141+ completer->setCaseSensitivity (Qt::CaseInsensitive);
118142 editor->setCompleter (completer);
119143 }
120144 // Set the maximum length to the highest possible value instead of the default 32768.
0 commit comments