我需要一个QCombox,它会根据文本输入过滤项目。如果我将QCombobox设置为可编辑,则用户可以插入文本,并自动创建QCompleter。但是项目没有被过滤,我不希望用户添加新项目。
是否有可能将此功能添加到QCombobox?
试试这个代码,这是我在我的项目中使用的东西
import sys
from PyQt4.QtGui import QComboBox, QApplication, QCompleter, QSortFilterProxyModel, QStandardItemModel, QStandardItem
from PyQt4.QtCore import Qt
class ExtendedCombo( QComboBox ):
def __init__( self, parent = None):
super( ExtendedCombo, self ).__init__( parent )
self.setFocusPolicy( Qt.StrongFocus )
self.setEditable( True )
self.completer = QCompleter( self )
# always show all completions
self.completer.setCompletionMode( QCompleter.UnfilteredPopupCompletion )
self.pFilterModel = QSortFilterProxyModel( self )
self.pFilterModel.setFilterCaseSensitivity( Qt.CaseInsensitive )
self.completer.setPopup( self.view() )
self.setCompleter( self.completer )
self.lineEdit().textEdited[unicode].connect( self.pFilterModel.setFilterFixedString )
self.completer.activated.connect(self.setTextIfCompleterIsClicked)
def setModel( self, model ):
super(ExtendedCombo, self).setModel( model )
self.pFilterModel.setSourceModel( model )
self.completer.setModel(self.pFilterModel)
def setModelColumn( self, column ):
self.completer.setCompletionColumn( column )
self.pFilterModel.setFilterKeyColumn( column )
super(ExtendedCombo, self).setModelColumn( column )
def view( self ):
return self.completer.popup()
def index( self ):
return self.currentIndex()
def setTextIfCompleterIsClicked(self, text):
if text:
index = self.findText(text)
self.setCurrentIndex(index)
if __name__ == "__main__":
app = QApplication(sys.argv)
model = QStandardItemModel()
for i,word in enumerate( ['hola', 'adios', 'hello', 'good bye'] ):
item = QStandardItem(word)
model.setItem(i, 0, item)
combo = ExtendedCombo()
combo.setModel(model)
combo.setModelColumn(0)
combo.show()
sys.exit(app.exec_())
1.3.3. 过滤输入 过滤是Web应用安全的基础。它是你验证数据合法性的过程。通过在输入时确认对所有的数据进行过滤,你可以避免被污染(未过滤)数据在你的程序中被误信及误用。大多数流行的PHP应用的漏洞最终都是因为没有对输入进行恰当过滤造成的。 我所指的过滤输入是指三个不同的步骤: l识别输入 l过滤输入 l区分已过滤及被污染数据 把识别输入做为第一步是因为如果你不知道它是什么,你也就不能正确地过
我们经常会要求用户在文本框中输入特定的数据,或者输入特定格式的数据。例如,必须包含某些字符,或者必须匹配某种模式。由于文本框在默认情况下没有提供多少验证数据的手段,因此必须使用JavaScript 来完成此类过滤输入的操作。而综合运用事件和DOM 手段,就可以将普通的文本框转换成能够理解用户输入数据的功能型控件。 1. 屏蔽字符 有时候,我们需要用户输入的文本中包含或不包含某些字符。例如,电话号码
可以对搜索结果进行过滤,只显示包含特定字段值的文档。也可以创建否定过滤器,排除包含特定字段值的文档。 从 Fields 表或 Documents 表中选择要添加的字段过滤器。除了可以创建积极字段和消极过滤器外,Documents 表还可以过滤某一字段是否存在。使用过的过滤器会在 Query 栏下方显示。消极过滤器用红色显示。 从 Fields 列表中添加一个过滤器: 点击想要过滤的字段名。这里显示
问题内容: 我一直在尝试使用docker process命令获取docker实例的容器ID,但是当我尝试使用 名称 过滤器时,对我来说效果 很好 。 结果容器ID: 3c7e865f1dfb 但是,当我使用 图像进行 过滤时,我将获得所有实例容器ID: 结果容器ID: 5570dc09b581 3c7e865f1dfb 但我希望仅获得mariadb的容器ID。 如何使用过滤器作为图像获取Docke
我登录jetty时遇到问题。我在文件中写日志。在生成的日志文件中,应用程序的日志级别是info,但我将其设置为WARN。我有个想法,jetty不用过滤就可以从应用程序中写入日志,是吗? > 为jetty设置日志记录: 文件{jetty.base}/resources/jetty logging。属性 文件{jetty.base}/资源/log4j.properties 文件{jetty.base}
过滤用户数据是Web应用安全的基础。它是验证数据合法性的过程。通过对所有的输入数据进行过滤,可以避免恶意数据在程序中被误信或误用。大多数Web应用的漏洞都是因为没有对用户输入的数据进行恰当过滤所引起的。 我们介绍的过滤数据分成三个步骤: 1、识别数据,搞清楚需要过滤的数据来自于哪里 2、过滤数据,弄明白我们需要什么样的数据 3、区分已过滤及被污染数据,如果存在攻击数据那么保证过滤之后可以让我们使用