Как настроить всплывающее окно QCompleter в PyQt?
У меня есть несколько вещей для QCompleter QLineEdit, я заинтересован в настройке. Я хочу, чтобы он вел себя подобно строке адреса / поиска в Chrome.
- как я могу ограничить количество строк, которые отображаются? Например, даже если есть 15 матчей, я хочу, чтобы QCompleter показывал только 5.
- как изменить размер всплывающего окна? Например, я хочу сделать всплывающее окно приятным и уютным. Согласно приведенному выше примеру, я хочу, чтобы всплывающее окно изменяло размер до 5 рядов ровно без всяких показывая уродливые полосы прокрутки.
- как переместить всплывающее окно? Например, я хочу настроить вертикальное положение всплывающего окна так, чтобы оно было немного ниже родительского виджета.
- как я могу отформатировать элементы списка показанного всплывающего окна? Например, я хочу выделить часть слова, которая соответствует.
2 ответов
- чтобы ограничить количество строк: измените модель на a QStringListModel с помощью QCompleter.сетмоделя, и установите фиксированное количество элементов перед отображением всплывающего окна. Также убедитесь, что maxVisibleItems устанавливается соответствующим образом (по умолчанию семь).
- всплывающее окно должно изменить на правильный высота
автоматически. The ширина всплывающего окна можно рассчитать, добавив вместе
ширина поля (
popup.width() - popup.viewport().width()
), ширина рамки (2 * popup.frameWidth()
) и ширина самой длинной строки (popup.fontMetrics().boundingRect(string).width()
). - позиционирование (и ширина) всплывающего окна можно контролировать путем передачи
соответствующий
QRect
в QCompleter.полный. - формат элементов списка может управляться настройка делегата элемента на всплывающем окне. См.ответ для примера делегата элемента с богатым текстом. (Но обратите внимание, что это повлияет на то, как ширина всплывающего окна рассчитывается).
хотя я никогда не пробовал то же самое в документации четко указано использовать maxVisibleItems(int maxItem)
чтобы ограничить количество видимых элементов.
и как с настройкой всплывающего окна я вещь, которую вам нужно сделать подкласс QAbstractItemView
и передайте его QCompleter::setPopup(QAbstractItemView * popup)