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

时间:2011-10-30 16:58:14

标签: qt pyqt customization qcompleter

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

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

虽然我从未尝试使用相同的文档明确使用maxVisibleItems(int maxItem)来限制可见的数字项目。

和PopUp Window的自定义我需要创建QAbstractItemView的子类并在QCompleter::setPopup(QAbstractItemView * popup)

上传递它

设置setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)