我有一些东西为QLineEdit的QCompleter我感兴趣的自定义。我想使它的行为类似于Chrome中的地址/搜索栏。
- 如何限制显示的行数?例如,即使有15个匹配,我只希望QCompleter显示5。
- 如何调整弹出窗口的大小?例如,我想使弹出窗口漂亮而舒适。根据上面的例子,我希望弹出窗口的大小调整为5行,没有任何显示任何丑陋的滚动条。
- 如何移动弹出窗口?例如,我想调整弹出窗口的垂直位置,使其稍微低于父小部件。
- 我如何格式化显示的弹出窗口的列表项?例如,我想将匹配的单词部分加粗。
- 限制行数:将模型更改为aQStringListModel使用QCompleter.setModel,并在弹出窗口显示之前设置固定数量的项目。同时确保maxVisibleItems设置得当(默认为7)。
- 弹出窗口应该调整到正确的高度自动。的宽度可以通过将页边距宽度(
popup.width() - popup.viewport().width()
),帧的宽度(2 * popup.frameWidth()
)和最长字符串的宽度(popup.fontMetrics().boundingRect(string).width()
)。 - 可以通过一个参数来控制弹出框的位置(和宽度)适当的
QRect
QCompleter.complete。 - 列表项的格式可以通过在弹出框上设置项委托来控制。有关富文本项委托的示例,请参阅此答案。(但注意,这将影响如何计算弹出窗口的宽度)。
虽然我从未尝试过相同的文档清楚地说明使用maxVisibleItems(int maxItem)
来限制数量项目可见。
和自定义的弹出窗口一样,你需要做一个QAbstractItemView
的子类,并传递给QCompleter::setPopup(QAbstractItemView * popup)
set setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)