如何在PyQt中自定义QCompleter弹出窗口?

c00*_*ter 9 customization qt pyqt qcompleter

我有一些关于QLineEdit的QCompleter的东西,我对定制感兴趣.我想让它的行为类似于Chrome中的地址/搜索栏.

  1. 如何限制显示的行数?例如,即使有15个匹配项,我也只希望QCompleter显示5个.
  2. 如何调整弹出窗口的大小?例如,我想让弹出窗口变得美观和舒适.根据上面的例子,我希望弹出窗口完全调整为5行,而不显示任何丑陋的滚动条.
  3. 如何移动弹出窗口?例如,我想调整弹出窗口的垂直位置,使其略低于父窗口小部件.
  4. 如何格式化显示的弹出窗口的列表项?例如,我想加粗匹配单词的部分.

ekh*_*oro 6

  1. 要限制行数: 使用 QCompleter.setModel将模型更改为 QStringListModel,并在显示弹出窗口之前设置固定数量的项目.还要确保正确设置maxVisibleItems(默认值为7).
  2. 弹出窗口应 自动调整到正确的高度.的宽度弹出的可通过添加在一起的边缘(的宽度来计算popup.width() - popup.viewport().width()),所述框架(的宽度2 * popup.frameWidth())的最长字符串的宽度(和popup.fontMetrics().boundingRect(string).width()).
  3. 可以通过将适当的值传递QRectQCompleter.complete来控制弹出窗口的定位(和宽度).
  4. 可以通过在弹出窗口上设置项目委托来控制列表项的格式.有关富文本项委托的示例,请参阅此答案.(但请注意,这将影响弹出宽度的计算方式).