我遇到QComboBox的问题,不允许我更改编辑 文本到任何不同案例的现有项目。
示例代码如下。我想做的是将'one'输入组合中 已经包含项目'One'的框没有副作用 文本被更改为“一个”。目前,它已改回'One' 组合框失去焦点。
禁用AutoCompletionCaseSensitivity有效,但它有侧面 没有用的效果(例如,不显示'one'的完成)。
我也试过覆盖QComboBox的focusOutEvent和 恢复正确的文本,但然后复制粘贴之类的东西不会 工作。改变完成者也没有任何帮助。
事实组合框的行为方式对我的应用程序是有害的。如果 任何人有任何想法(或我错过了一些明显的东西),请让我 知道。
我在Ubuntu 10.04上使用Qt 4.6.2和PyQt 4.7.2但是有 在4.5以上的其他发行版/ Qt版本上体验过这一点。
谢谢和问候
示例代码:
from PyQt4.QtGui import *
from PyQt4.QtCore import SIGNAL, Qt
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
combo = QComboBox()
combo.setEditable(True)
combo.addItems(['One', 'Two', 'Three'])
lineedit = QLineEdit()
layout = QVBoxLayout()
layout.addWidget(combo)
layout.addWidget(lineedit)
self.setLayout(layout)
app = QApplication([])
widget = Widget()
widget.show()
app.exec_()
答案 0 :(得分:1)
from PyQt4.QtGui import *
from PyQt4.QtCore import SIGNAL, Qt, QEvent
class MyComboBox(QComboBox):
def __init__(self):
QComboBox.__init__(self)
def event(self, event):
if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Return:
self.addItem(self.currentText())
return QComboBox.event(self, event)
class Widget(QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
combo = MyComboBox()
combo.setEditable(True)
combo.addItems(['One', 'Two', 'Three'])
lineedit = QLineEdit()
layout = QVBoxLayout()
layout.addWidget(combo)
layout.addWidget(lineedit)
self.setLayout(layout)
app = QApplication([])
widget = Widget()
widget.show()
app.exec_()
唯一的问题是它允许在组合框中添加重复项。
我尝试在if语句中添加self.findText(...),但是甚至Qt.MatchExactly | Qt.MatchCaseSensitive
会匹配“bla”,“bLa”和“BLA”。
我想你会发现的。