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

Qt 4.5 (PyQt 4.6.1)

Я ищу виджет, похожий на QComboBox, который автоматически фильтрует свои записи до тех, которые начинаются с ввода в текстовом поле. В поле со списком около 300 элементов.

Я пробовал два подхода:

QLineEdit с QCompleter

Преимущества

  • Фильтрация товаров работает.

Недостатки

  • Не показывает всплывающее окно, если текстовое поле пусто.
  • Не выполняет встроенное завершение.
  • Позволяет вставлять элементы, которых нет в списке.

Редактируемый QComboBox со значением вставки нет

Преимущества

  • Красивое всплывающее окно
  • Завершает строку в текстовом поле.

Недостатки

  • Без фильтрации
  • Ввод возможен только в либо текстовом поле, либо во всплывающем окне. Нажатие на всплывающее окно не выбирает наиболее подходящий элемент во всплывающем окне.

Что мне нужно

  • Всплывающее окно для выбора элементов.
  • Медленные подсказчики должны иметь возможность начать подсказывать название предмета, и всплывающее окно переключается на наиболее подходящее.
  • Предпочтительно я должен фильтровать элементы, чтобы отображались только частично совпадающие элементы.

person Georg Schölly    schedule 23.10.2009    source источник


Ответы (1)


Что касается вашей первой попытки с QLineEdit, вы можете установить completionMode для выполнения это встроенный.

Для вашей второй попытки вы можете добавить объект QCompleter к вашему QCombBox, чтобы фильтровать ваши элементы, как вы хотите. Член QCompleter QComboBox предлагает простой способ использования QCompleter.

В любом случае, если вас не устраивает этот метод, вы можете управлять объектом QCompleter с помощью себя. Это позволяет выбрать способ отображения списка элементов (используя любые представления) и определить порядок элементов в списке. См. основные детали QCompleter.

person Patrice Bernassola    schedule 23.10.2009
comment
1: Установив completionMode в строку, я отключу всплывающее окно. Это очень плохо. У меня таких продуктов много: хлеб 300г, хлеб 700г, хлеб 1кг. - person Georg Schölly; 23.10.2009
comment
2: Разве QComboBox уже не использует компоновщик в встроенном режиме? - person Georg Schölly; 23.10.2009
comment
3: Подкласс QCompleter звучит неплохо. Я уже пробовал создавать подклассы QValidator и QComboBox. - person Georg Schölly; 23.10.2009
comment
1: Стандартный QCompleter позволяет выбирать только между встроенным, всплывающим ИЛИ нефильтрованным 2: Да, это то, что я хотел бы выделить вам, поскольку вы не упомянули, что используете его 3: Вы можете попробовать это, но я бы создал подкласс QComboBox и переопределил поведение QCompleter - person Patrice Bernassola; 23.10.2009