Как я могу настроить всплывающее окно QCompleter в PyQt? - PullRequest
9 голосов
/ 30 октября 2011

У меня есть несколько вещей для QCompleter QLineEdit, которые я заинтересован в настройке. Я хочу, чтобы он вел себя аналогично строке адреса / поиска в Chrome.

  1. Как я могу ограничить количество отображаемых строк? Например, даже если есть 15 совпадений, я хочу, чтобы QCompleter показывал только 5.
  2. Как мне изменить размер всплывающего окна? Например, я хочу сделать всплывающее окно красивым и уютным. В соответствии с приведенным выше примером, я хочу, чтобы всплывающее окно изменило размеры до 5 строк точно без каких-либо уродливых полос прокрутки.
  3. Как мне переместить всплывающее окно? Например, я хочу настроить вертикальное положение всплывающего окна так, чтобы оно было немного ниже родительского виджета.
  4. Как мне отформатировать элементы списка показанного всплывающего окна? Например, я хочу выделить часть слова, которая соответствует.

Ответы [ 2 ]

6 голосов
/ 31 октября 2011
  1. Чтобы ограничить количество строк: измените модель на QStringListModel с помощью QCompleter.setModel , и установите фиксированное количество элементов перед отображением всплывающего окна. Также убедитесь, что maxVisibleItems установлено правильно (по умолчанию - семь).
  2. Размер всплывающего окна должен измениться до правильной высота автоматически. ширина всплывающего окна может быть рассчитана путем сложения ширина полей (popup.width() - popup.viewport().width()), ширина рамки (2 * popup.frameWidth()) и ширина самой длинной строки (popup.fontMetrics().boundingRect(string).width()).
  3. Положение (и ширину) всплывающего окна можно контролировать, передавая соответствующий QRect QCompleter.complete .
  4. Формат элементов списка можно контролировать с помощью , устанавливающего делегат элемента во всплывающем окне. См. этот ответ для примера делегата элемента расширенного текста. (Но учтите, что это повлияет на то, как рассчитывается ширина всплывающего окна).
2 голосов
/ 30 октября 2011

Хотя я никогда не пробовал того же самого, в документации четко указано, что maxVisibleItems(int maxItem) используется для ограничения количества видимых элементов.

и, как и при настройке всплывающего окна, я должен создать подкласс QAbstractItemView и передать его на QCompleter::setPopup(QAbstractItemView * popup)

набор setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)

...