gpt4 book ai didi

c++ - 我如何优化 QCompleter 的性能?

转载 作者:行者123 更新时间:2023-11-30 01:37:49 25 4
gpt4 key购买 nike

我已经用 QStringList 初始化了 QCompleter。而这个字符串列表有超过 30,000 个条目。我已在我的用户界面中连接到 Qlineedit。那里没有问题。问题在于,每当我在该 qlineedit 中键入内容时,正如您可能猜到的那样,弹出的建议非常缓慢,因为有超过 30,000 个条目。所以我想知道是否有其他方法可以提高性能?比如通过使用多线程或类似的东西。我是qt的新手,如果我在实现过程中犯了任何错误,我深表歉意。谢谢

编辑:我的问题与这个问题不同QCompleter for large models因为我没有使用 QComboBox,所以我使用的是 QLineEdit。

最佳答案

您可以尝试的第一件事是使用排序的 QStringList 而不是未排序的。我不知道你从哪里获取列表的字符串,但如果你可以按排序顺序而不是未排序的顺序获取它们,你一定要尝试一下。然后你就可以调用setModelSorting具有 QCompleter::CaseSensitivelySortedModelQCompleter::CaseInsensitivelySortedModel 值的完成器上的方法 - 这将允许您的完成器从 linear search 切换(O(n) 复杂度)到 binary search (O(log(n))复杂度)。给定字符串列表的大小,最坏情况下的二分搜索需要 11 次比较 (log(30000) ~= 10.3) 才能找到特定字符串,而线性搜索在最坏情况下需要 30000 次比较。

这个建议可能对您不起作用,因为您无法在字符串列表中按排序顺序获取数据(或进入由任何自定义 QAbstractItemModel 子类表示的任何其他数据结构) ).不幸的是,QCompleter 似乎不容易扩展,因为它的 setCompletionPrefix 方法似乎触发了模型内的完成搜索,但它不是虚拟的,因此您无法覆盖它以多态方式工作。您可能需要自定义您尝试使用完成器的小部件,以便它使用具有高效搜索和数据结构的自定义完成逻辑,并且仅使用 QCompleter 来保存一个小的(已排序的)列表已经找到候选人。有一个 example它做了一些类似的事情,所以可能值得一试。

关于c++ - 我如何优化 QCompleter 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48986448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com