2011-10-30 14 views
8

Tengo algunas cosas para un QCompleter de QLineEdit que estoy interesado en personalizar. Quiero que se comporte de forma similar a la dirección/barra de búsqueda en Chrome.¿Cómo puedo personalizar la ventana emergente QCompleter en PyQt?

  1. ¿Cómo puedo limitar el número de filas que se muestran? Por ejemplo, incluso si hay 15 coincidencias, solo quiero que QCompleter muestre 5.
  2. ¿Cómo puedo cambiar el tamaño de la ventana emergente? Por ejemplo, quiero que la ventana emergente sea agradable y cómoda. Según el ejemplo anterior, quiero que la ventana emergente cambie el tamaño a 5 filas exactamente sin mostrar ninguna barra de desplazamiento fea.
  3. ¿Cómo puedo mover la ventana emergente? Por ejemplo, quiero ajustar la posición vertical de la ventana emergente para que quede ligeramente por debajo del widget principal.
  4. ¿Cómo puedo formatear los elementos de la lista de la ventana emergente que se muestra? Por ejemplo, quiero poner en negrita la parte de la palabra que coincide.
+1

setMaxVisibleItems (5) –

+0

QCompleter :: setPopup (* QAbstractItemView emergente) –

Respuesta

5
  1. Para limitar el número de filas: cambiar el modelo de a QStringListModel usando QCompleter.setModel, y establece un número fijo de elementos antes de que aparezca la ventana emergente. Asegúrese también de que maxVisibleItems esté configurado correctamente (el valor predeterminado es siete).
  2. La ventana emergente debe cambiar el tamaño a la altura correcta automáticamente. El anchura de la ventana emergente se puede calcular mediante la suma de la anchura de los márgenes (popup.width() - popup.viewport().width()), la anchura del marco (2 * popup.frameWidth()), y la anchura de la cadena más larga (popup.fontMetrics().boundingRect(string).width()).
  3. El posicionamiento (y el ancho) de la ventana emergente se puede controlar pasando apropiado QRect a QCompleter.complete.
  4. El formato de los elementos de la lista podría controlarse mediante setting an item delegate en la ventana emergente. Consulte this answer para ver un ejemplo de un delegado de elementos de texto enriquecido. (Pero tenga en cuenta que esto afectará cómo se calcula el ancho emergente).
2

Aunque nunca he intentado lo mismo La documentación claramente indica que use maxVisibleItems(int maxItem) para restringir el número de elementos visibles.

y como con la personalización de la cosa ventana emergente que usted necesita para hacer una subclase de QAbstractItemView y transmitirlo QCompleter::setPopup(QAbstractItemView * popup)

configurar setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)

+0

Probé 'maxVisibleItems', y no sé si se trata de un problema de Mac, pero no se comporta como pensé que lo haría. Todo lo que hace es cambiar el tamaño de la ventana emergente (más o menos, no es exacta) para que solo pueda ver, digamos 5 elementos. Esperaría que una ventana emergente redimensione * y * un recorte en los elementos de la lista emergente también. – c00kiemonster

Cuestiones relacionadas