问题标签 [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.
python - 如何使用 PyQt5 QCompleter 完成代码
我想创建一个QLineEdit
具有基本代码完成功能的字段,但到目前为止,每当我选择一个 item 的属性时item.attr
,它item.
都会被替换attr
而不是插入attr
after item.
。此外,如果它attr
具有attr.subattr
,则无法预测它,因为它item.
已被替换并且attr.
不存在于我的模型的根部。
我创建了一个相对最小的示例:
我从Qt5 Docs和 Qt4.6 的示例中提出了这种方法,但都没有结合我想要完成的所有内容。我需要不同的模型结构吗?我需要更多的子类QCompleter
吗?我需要不同的Qt
班级吗?
示例的 gif:(对不起质量)
结语:
对于那些对实际代码完成感兴趣的人,我在集成@eyllanesc 的答案后扩展了我的代码,以便在匹配的标识符序列之前的文本被单独保留(匹配序列之前的文本不会阻止匹配,也不会在新匹配时被删除插入)。只需要一点正则表达式将我们想要完成的部分与前面的文本分开:
c++ - QCompleter 不支持上下键
我setEditable(true)
用来QComboBox
编辑,当我输入时,完成者的cy
弹出视图将可见并列出所有可能的结果,如:将设置,同时完成者的弹出视图更新,仅显示。如何自定义它以使其表现得像 web 的组件。cyan
cyana
liecyan
Qt::Key_Down
cyan
cyan
cyan
select
python - QCompleter 从多列中选择数据
我正在尝试在行编辑中完成一个完成,其中一个输入一些字符串,例如“名字,姓氏”,每个字符串对应于表模型中的两列之一(最终目标是为了灵活,但目前我只想运行这个)。我目前尝试的方法是:
a) 将两列的结果合并到代理 wa 第三列,其中只有名字,姓氏作为离散字符串(如果用户将其作为姓氏,名字输入,这很不方便。当我尝试时,当前的实现不起作用 bc在“假”列上执行 setCompletionColumn 它不会激活我重新实现的数据方法。columnCount 包括假列)
b)有一个不过滤的完成器,带有一个后端代理模型,其接受行()过滤器过滤第一个和最后一个(不知道如何执行非过滤完成器 - 否则它只是查看一列和弹出窗口最后显示一堆没有姓氏的名字)
c) 欺骗 Tree 模型并制作它,当我放一个逗号时,该模型会查看一个“分支”,该“分支”由所有名字或姓氏为(开头?)逗号前字符串的人组成。(我只是不确定如何开始,它使用与 b 相同的接受行)但我不知道如何做像单独的〜分支〜)
这让我很头疼,而且这些实现都不是特别令人愉快的。我是不是对自己太苛刻了,喜欢使用错误的工具,还是只是我必须努力解决的问题?我可以粘贴一些代码,但 atm 我想知道我所做的是否值得。
更新:代码片段和像素
] 1
红色圆圈是我所说的多个名字,它们对应于表中的不同条目,但完成者仅限于一列。在单击和获取用户名称方面,我已经弄清楚了,这只是格式和处理逗号。
这是我完成课程的一部分:
这是我重新实现的代理模型的接受行:
理想情况下,它看起来像这样:
c++ - 如何在 QComboBox 中为 QCompleter 使用自定义验证函数
我有一个字符串匹配函数用于搜索比它更高级的名称QString::contains()
(例如,当您搜索“mueller”时,它将匹配“Müller”)。
我想使用此功能在QComboBox
. 默认完成几乎可以满足我的需要:如果我这样做
并在 's lineedit 中键入一些文本,QComboBox
弹出窗口,仅显示已键入内容的条目。
这就是我想要的,但我希望QCompleter
使用我的搜索功能来评估匹配,而不是QString::startsWith()
这里显然使用的(并且将模式设置Qt::MatchContains
为更好但仍然不够)。
有没有办法自定义完成者的搜索功能?
感谢大家的帮助!
python - QPlainTextEdit 和 QCompleter 焦点问题
我已经阅读了 QCompleter 文档(https://doc.qt.io/qt-5/qcompleter.html),并且尝试为 QPlainTextEdit 实现 QCompleter。
现在我让它像这样工作:
但问题是,如果你开始写一个在keyword.kwlist创建的列表中的单词,那么它会专注于光标下弹出的弹出窗口,它不会让我继续输入。
但是在 QCompleter 文档页面上将代码从 c++ 转换为 python 时,即使它在下面为我提供了一些单词选择,我仍然可以输入。
我尝试将焦点设置为 self.editor 但这没有用。我需要这方面的帮助以及弹出窗口的位置。现在它有点挡住了这个词的视野。
它的功能应该是这样的:
但这仅适用于 QLineEdit。
c++ - 带有附加结果的 QCompleter
需要一些帮助。我有QCompleter
一些QStringList
,例如:
当用户从中搜索QLineEdit
单词时它工作正常list
,但我想显示更改后的结果。例如:用户类型world
,它显示hello world
在完成弹出窗口中。
是否可以?如果是 - 如何?
python - 如何在构建后设置 QCompleter 模型
我刚开始使用 PyQt5,这里有一个小文件:
我的问题是这个错误:
每次我运行上面的代码。所以我的问题是:我在这里做错了什么,我刚从 pyqt5 开始,作为我的第一个程序,我立即得到这个错误。作为旁注,当我使用固定列表和把它放在QCompleter
程序工作的构造函数中,但这不是一个选项,因为我需要随着用户输入而改变结果
qt - 如何在没有焦点的情况下为 QTreeView 创建焦点效果?
我正在创建一个如上所述的完成器,它是 QTreeView(用于内容)和 QLabel(用于标题)的组合。我自己构建了列表,没有继承自 QCompleter,而是继承自 QWidget。
完成者上方是 QLineEdit。当我点击灯泡或在 LineEdit 中写一些东西时,将显示完成者。理论上,完成者应该有焦点,因为我在上面的构造函数中设置了setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Popup );
。但我希望 LineEdit 总是有焦点,所以我可以继续写。我使用了这里提到的方法,重点仍然在 LineEdit。
现在您看到上面的 QTreeView 有鼠标悬停效果,当我将鼠标移到一条线上时,该线有一个橙色背景。我是在paint
代表的职能上做到的。现在我想做同样的效果,但从键盘。我不知道该怎么做,因为完成者现在没有焦点了(焦点仍然在 LineEdit 中)。我调试(按键盘上的上下键),有时滚动条会移动,索引坐标总是(-1,-1)。我不知道为什么,因为我如何控制 Completer 同时它没有焦点??????(但这是另一个问题,我应该弄清楚)。
如何从键盘在这里创建相同的效果?你能给我一个提示或方向吗?
c++ - 文本更改时的 QListWidget 可编辑项信号
在 Qt 4.6.1 上,当我从 QListWidget 连接 itemChanged 信号时,我看不到在每次编辑时持续发射行为,如
对我来说,它只在按“Enter”时发出 itemChanged,与 commitData 解决方案的方式相同。
在编辑 item(0) 期间,如何让它在每次更改/按键时发出信号,以便我可以实现自动完成类型功能?
python - QTreeView 中的 QCompleter 未完成预期的列
我正在通过 QStyledItemDelegate 在 QTreeView 上安装 QCompleter。我的 QStandardItemModel 如下所示:
在子类委托中,我有以下代码:
问题是我似乎无法让我的完成者在我的分层树中搜索子项。例如,它只会返回“Item 1, Item 2”而不是“Item A, Item D”。好像我缺少“setParentItem()”函数或其他东西......
这是一些手动执行我想要的“工作”代码,但是我想知道如何直接在模型上执行此操作: