1

QComboBox に問題があり、編集テキストを大文字と小文字の異なる既存のアイテムに変更できません。

サンプルコードは以下です。私がやりたいのは、テキストが「One」に変更されるという副作用なしで、「One」という項目が既に含まれているコンボボックスに「one」を入力することです。現在、コンボ ボックスがフォーカスを失うとすぐに「1」に戻ります。

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

1 に答える 1

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」にも一致します。きっとわかると思います。

于 2010-10-18T22:46:00.833 に答える