Как изменить порядок всплывающего окна QCompleter?

Я создал кастом QCompleter класс, который отображает все элементы во всплывающем окне, которые содержат набранное слово QLineEdit,

Сейчас все элементы упорядочены в алфавитном порядке, как вы можете видеть здесь:

введите описание изображения здесь

Я хочу, чтобы всплывающее окно отображало «dab» в качестве первого предложения, если я наберу «dab», а затем другие элементы в алфавитном порядке.

Я хочу этот порядок всплывающих окон:

  • мазок
  • исправимый
  • разрешима
  • делящийся
  • управл емым
  • расходуемого

Это обычай QCompleter класс, который я использую:

Код

class MyCompleter : public QCompleter
{
Q_OBJECT

public:
inline MyCompleter(const QStringList& words, QObject * parent) :
QCompleter(parent), m_list(words), m_model()
{
setModel(&m_model);
}

// Filter
inline void update(QString word)
{
// Include all items that contain "word".

QStringList filtered = m_list.filter(word, caseSensitivity());
m_model.setStringList(filtered);
m_word = word;
complete();
}

inline QString word()
{
return m_word;
}

private:
QStringList m_list;
QStringListModel m_model;
QString m_word;
};

1

Решение

Я сделал это сам, создав копию своего m_list и искать его с startsWith функция. Затем я добавил найденные предметы в tempList и отфильтровал c_m_list как я и сделал в своем вопросе. filtered список также был добавлен в tempList,

Теперь это выглядит так:

всплывающий пример

Код

class MyCompleter : public QCompleter
{
Q_OBJECT

public:
inline MyCompleter(const QStringList& words, QObject * parent) :
QCompleter(parent), m_list(words), m_model()
{
setModel(&m_model);
}

inline void update(QString word)
{
// Include all items that contain "word".
int idx(0);
QStringList tempList;
QStringList c_m_list(m_list);

while (idx < c_m_list.size())
{
if (c_m_list.at(idx).startsWith(word,Qt::CaseInsensitive))
{
tempList.append(c_m_list.takeAt(idx--));
}
idx++;
}

QStringList filtered = c_m_list.filter(word, caseSensitivity());
c_m_list.sort();

tempList.append(filtered);

m_model.setStringList(tempList);
m_word = word;
complete();
}

inline QString word()
{
return m_word;
}

private:
QStringList m_list;
QStringListModel m_model;
QString m_word;
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]