9

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

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

2 回答 2

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

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

并且与弹出窗口的自定义一样,您需要创建一个子类QAbstractItemView并将其传递给QCompleter::setPopup(QAbstractItemView * popup)

setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)

于 2011-10-30T17:17:10.917 回答