QComboBox заменяет текст редактирования, если регистр отличается от существующего элемента - PullRequest
1 голос
/ 18 октября 2010

У меня проблема с QComboBox, не позволяющим мне изменить редактирование текст к чему-либо существующему предмету другого регистра.

Пример кода приведен ниже. Что я хотел бы сделать, это ввести «один» в комбо коробка, уже содержащая элемент «Один» без побочного эффекта текст меняется на «Один». В настоящее время он заменен на «Один» как как только поле со списком теряет фокус.

Отключение AutoCompletionCaseSensitivity работает, но имеет свою сторону эффект бесполезности (например, не показывает завершения для «один»).

Я также попытался переопределить focusOutEvent QComboBox и восстановить правильный текст, но такие вещи, как копирование-вставка не Работа. Смена завершителя тоже не помогла.

Факт, что поля со списком ведут себя таким образом, вреден для моего приложения. Если У кого-нибудь есть идеи (или я что-то упустил очевидное), пожалуйста, дайте мне знать.

Я использую Qt 4.6.2 и PyQt 4.7.2 в Ubuntu 10.04, но имею испытал это на других версиях дистрибутива / Qt выше 4.5.

Спасибо и всего наилучшего

Пример кода:

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_()

1 Ответ

1 голос
/ 19 октября 2010
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_()

Единственная проблема в том, что это позволит добавлять дубликаты в ваш список.Я попытался добавить self.findText (...) в оператор if, но даже Qt.MatchExactly | Qt.MatchCaseSensitive будет соответствовать "bla", "bLa" и "BLA".Я думаю, вы узнаете.

...