问题标签 [qcompleter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4110 浏览

python - 如何使用 PyQt5 QCompleter 完成代码

我想创建一个QLineEdit具有基本代码完成功能的字段,但到目前为止,每当我选择一个 item 的属性时item.attr,它item.都会被替换attr而不是插入attrafter item.。此外,如果它attr具有attr.subattr,则无法预测它,因为它item.已被替换并且attr.不存在于我的模型的根部。

我创建了一个相对最小的示例:

我从Qt5 Docs和 Qt4.6 的示例中提出了这种方法,但都没有结合我想要完成的所有内容。我需要不同的模型结构吗?我需要更多的子类QCompleter吗?我需要不同的Qt班级吗?

示例的 gif:(对不起质量)

在此处输入图像描述

结语:

对于那些对实际代码完成感兴趣的人,我在集成@eyllanesc 的答案后扩展了我的代码,以便在匹配的标识符序列之前的文本被单独保留(匹配序列之前的文本不会阻止匹配,也不会在新匹配时被删除插入)。只需要一点正则表达式将我们想要完成的部分与前面的文本分开:

0 投票
1 回答
249 浏览

c++ - QCompleter 不支持上下键

setEditable(true)用来QComboBox编辑,当我输入时,完成者的cy弹出视图将可见并列出所有可能的结果,如:将设置,同时完成者的弹出视图更新,仅显示。如何自定义它以使其表现得像 web 的组件。cyancyanaliecyanQt::Key_Downcyancyancyanselect

0 投票
1 回答
1200 浏览

python - QCompleter 从多列中选择数据

我正在尝试在行编辑中完成一个完成,其中一个输入一些字符串,例如“名字,姓氏”,每个字符串对应于表模型中的两列之一(最终目标是为了灵活,但目前我只想运行这个)。我目前尝试的方法是:

a) 将两列的结果合并到代理 wa 第三列,其中只有名字,姓氏作为离散字符串(如果用户将其作为姓氏,名字输入,这很不方便。当我尝试时,当前的实现不起作用 bc在“假”列上执行 setCompletionColumn 它不会激活我重新实现的数据方法。columnCount 包括假列)

b)有一个不过滤的完成器,带有一个后端代理模型,其接受行()过滤器过滤第一个和最后一个(不知道如何执行非过滤完成器 - 否则它只是查看一列和弹出窗口最后显示一堆没有姓氏的名字)

c) 欺骗 Tree 模型并制作它,当我放一个逗号时,该模型会查看一个“分支”,该“分支”由所有名字或姓氏为(开头?)逗号前字符串的人组成。(我只是不确定如何开始,它使用与 b 相同的接受行)但我不知道如何做像单独的〜分支〜)

这让我很头疼,而且这些实现都不是特别令人愉快的。我是不是对自己太苛刻了,喜欢使用错误的工具,还是只是我必须努力解决的问题?我可以粘贴一些代码,但 atm 我想知道我所做的是否值得。


更新:代码片段和像素

![在此处输入图像描述] 1

红色圆圈是我所说的多个名字,它们对应于表中的不同条目,但完成者仅限于一列。在单击和获取用户名称方面,我已经弄清楚了,这只是格式和处理逗号。

这是我完成课程的一部分:

这是我重新实现的代理模型的接受行:

理想情况下,它看起来像这样:

在此处输入图像描述

0 投票
1 回答
785 浏览

c++ - 如何在 QComboBox 中为 QCompleter 使用自定义验证函数

我有一个字符串匹配函数用于搜索比它更高级的名称QString::contains()(例如,当您搜索“mueller”时,它将匹配“Müller”)。

我想使用此功能在QComboBox. 默认完成几乎可以满足我的需要:如果我这样做

并在 's lineedit 中键入一些文本,QComboBox弹出窗口,仅显示已键入内容的条目。

这就是我想要的,但我希望QCompleter使用我的搜索功能来评估匹配,而不是QString::startsWith()这里显然使用的(并且将模式设置Qt::MatchContains为更好但仍然不够)。

有没有办法自定义完成者的搜索功能?

感谢大家的帮助!

0 投票
0 回答
856 浏览

python - QPlainTextEdit 和 QCompleter 焦点问题

我已经阅读了 QCompleter 文档(https://doc.qt.io/qt-5/qcompleter.html),并且尝试为 QPlainTextEdit 实现 QCompleter。

现在我让它像这样工作:

在此处输入图像描述

但问题是,如果你开始写一个在keyword.kwlist创建的列表中的单词,那么它会专注于光标下弹出的弹出窗口,它不会让我继续输入。

但是在 QCompleter 文档页面上将代码从 c++ 转换为 python 时,即使它在下面为我提供了一些单词选择,我仍然可以输入。

我尝试将焦点设置为 self.editor 但这没有用。我需要这方面的帮助以及弹出窗口的位置。现在它有点挡住了这个词的视野。

它的功能应该是这样的:

在此处输入图像描述

但这仅适用于 QLineEdit。

0 投票
1 回答
439 浏览

c++ - 带有附加结果的 QCompleter

需要一些帮助。我有QCompleter一些QStringList,例如:

当用户从中搜索QLineEdit单词时它工作正常list,但我想显示更改后的结果。例如:用户类型world,它显示hello world在完成弹出窗口中。

是否可以?如果是 - 如何?

0 投票
1 回答
918 浏览

python - 如何在构建后设置 QCompleter 模型

我刚开始使用 PyQt5,这里有一个小文件:

我的问题是这个错误:

每次我运行上面的代码。所以我的问题是:我在这里做错了什么,我刚从 pyqt5 开始,作为我的第一个程序,我立即得到这个错误。作为旁注,当我使用固定列表和把它放在QCompleter程序工作的构造函数中,但这不是一个选项,因为我需要随着用户输入而改变结果

0 投票
0 回答
76 浏览

qt - 如何在没有焦点的情况下为 QTreeView 创建焦点效果?

在此处输入图像描述

我正在创建一个如上所述的完成器,它是 QTreeView(用于内容)和 QLabel(用于标题)的组合。我自己构建了列表,没有继承自 QCompleter,而是继承自 QWidget。

完成者上方是 QLineEdit。当我点击灯泡或在 LineEdit 中写一些东西时,将显示完成者。理论上,完成者应该有焦点,因为我在上面的构造函数中设置了setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Popup );。但我希望 LineEdit 总是有焦点,所以我可以继续写。我使用了这里提到的方法,重点仍然在 LineEdit。

现在您看到上面的 QTreeView 有鼠标悬停效果,当我将鼠标移到一条线上时,该线有一个橙色背景。我是在paint代表的职能上做到的。现在我想做同样的效果,但从键盘。我不知道该怎么做,因为完成者现在没有焦点了(焦点仍然在 LineEdit 中)。我调试(按键盘上的上下键),有时滚动条会移动,索引坐标总是(-1,-1)。我不知道为什么,因为我如何控制 Completer 同时它没有焦点??????(但这是另一个问题,我应该弄清楚)。

如何从键盘在这里创建相同的效果?你能给我一个提示或方向吗?

0 投票
1 回答
337 浏览

c++ - 文本更改时的 QListWidget 可编辑项信号

在 Qt 4.6.1 上,当我从 QListWidget 连接 itemChanged 信号时,我看不到在每次编辑时持续发射行为,如

Qt - 何时编辑 QListWidget 行的信号?

对我来说,它只在按“Enter”时发出 itemChanged,与 commitData 解决方案的方式相同。

在编辑 item(0) 期间,如何让它在每次更改/按键时发出信号,以便我可以实现自动完成类型功能?

0 投票
0 回答
170 浏览

python - QTreeView 中的 QCompleter 未完成预期的列

我正在通过 QStyledItemDelegate 在 QTreeView 上安装 QCompleter。我的 QStandardItemModel 如下所示:

在子类委托中,我有以下代码:

问题是我似乎无法让我的完成者在我的分层树中搜索子项。例如,它只会返回“Item 1, Item 2”而不是“Item A, Item D”。好像我缺少“setParentItem()”函数或其他东西......

这是一些手动执行我想要的“工作”代码,但是我想知道如何直接在模型上执行此操作: