Wie kann ich das QCompleter Popup-Fenster in PyQt anpassen?

8

Ich habe ein paar Dinge für QCompleter von QLineEdit. Ich bin an der Anpassung interessiert. Ich möchte, dass es sich ähnlich verhält wie die Adresse / Suchleiste in Chrome.

  1. Wie kann ich die Anzahl der angezeigten Zeilen begrenzen? Zum Beispiel, auch wenn es 15 Übereinstimmungen gibt, möchte ich nur, dass der QCompleter 5 anzeigt.
  2. Wie kann ich die Größe des Popup-Fensters ändern? Zum Beispiel möchte ich das Popup-Fenster schön und gemütlich machen. Wie im obigen Beispiel möchte ich das Popup-Fenster auf 5 Zeilen genau skalieren, ohne irgendwelche hässlichen Bildlaufleisten zu zeigen.
  3. Wie kann ich das Popup-Fenster verschieben? Ich möchte zum Beispiel die vertikale Position des Popup-Fensters so anpassen, dass sie leicht unter dem übergeordneten Widget liegt.
  4. Wie kann ich die Listenelemente des angezeigten Popup-Fensters formatieren? Zum Beispiel möchte ich den Teil des Wortes, der zusammenpasst, fett machen.
c00kiemonster 30.10.2011, 16:58
quelle

2 Antworten

5
  1. Um die Anzahl der Zeilen zu begrenzen: Ändern Sie das Modell in a QStringListModel verwenden QCompleter.setModel , und legen Sie eine feste Anzahl von Elementen fest, bevor das Popup angezeigt wird. Stellen Sie außerdem sicher, dass maxVisibleItems ordnungsgemäß festgelegt ist (Standardwert ist sieben).
  2. Das Popup-Fenster sollte auf die richtige Höhe angepasst werden automatisch. Die Breite des Popups kann berechnet werden, indem man die Breite der Ränder ( popup.width() - popup.viewport().width() ), die Breite des Rahmens ( 2 * popup.frameWidth() ) und die Breite der längsten Zeichenfolge ( popup.fontMetrics().boundingRect(string).width() ).
  3. Die Positionierung (und Breite) des Popups kann durch Übergeben von einem gesteuert werden Angemessene QRect zu QCompleter.complete .
  4. Das Format der Listenelemente kann durch Festlegen eines Elementdelegaten im Popup gesteuert werden . Siehe diese Antwort für ein Beispiel eines Rich-Text-Elementdelegaten. (Beachten Sie jedoch, dass dies die Berechnung der Popup-Breite beeinflusst).
ekhumoro 31.10.2011, 16:39
quelle
2

Obwohl ich noch nie versucht habe, das gleiche Die Dokumentation eindeutig zu verwenden maxVisibleItems(int maxItem) um die Anzahl der sichtbaren Elemente einzuschränken.

und wie bei der Anpassung der PopUp Window I-Sache müssen Sie eine Unterklasse von QAbstractItemView und übergeben Sie es an QCompleter::setPopup(QAbstractItemView * popup)

legen Sie setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)

fest     
Neel Basu 30.10.2011 17:17
quelle

Tags und Links