1

tabeView を取得して、その列の 1 つをコンボボックスとして表示しようとしています。これを行うために、カスタム デリゲートのコードを書きました。

class comboBoxDelegate(QStyledItemDelegate):

def __init__(self, model, parent=None):
    super(comboBoxDelegate, self).__init__(parent)
    self.parent= parent
    self.model= model

def createEditor(self, parent, option, index):

    if not index.isValid():
        return False

    self.currentIndex=index  

    self.comboBox = QComboBox(parent)
    self.comboBox.setModel(self.model)
    value = index.data(Qt.DisplayRole)
    self.comboBox.setCurrentIndex(value)

    return self.comboBox

def setEditorData(self, editor, index):
    value = index.data(Qt.DisplayRole)
    editor.setCurrentIndex(value)

def setModelData(self, editor, model, index):

    if not index.isValid():
        return False

    index.model().setData(index, editor.currentIndex(), Qt.EditRole)

def paint(self, painter, option, index):
    currentIndex= index.data(Qt.DisplayRole)

    opt= QStyleOptionComboBox()
    opt.rect= option.rect
    currentComboIndex= self.model.createIndex(currentIndex,0)
    opt.currentText= self.model.data(currentComboIndex, Qt.DisplayRole)

    QApplication.style().drawComplexControl(QStyle.CC_ComboBox, opt, painter)

問題は、試してみると、最初はコンボボックスにテキストが表示されないことです(クリックしただけです)。currentText プロパティが機能していないようです。どんな助けでも大歓迎です。

4

3 に答える 3

1

メソッドをオーバーライドQStyledItemDelegate.displayText()して、paint() を再実装せずにデリゲートにテキストを表示させることができます。何かのようなもの

class comboBoxDelegate(QStyledItemDelegate):
    ...
    def displayText(self, value, locale=None):
        return get_appropriate_text_representation_for_value(value)
于 2012-05-02T21:23:28.037 に答える
0

親クラスの paint() メソッドを呼び出す必要があると思います。追加:

QStyledItemDelegate.paint(self, painter, option, index)

クラスのペイントメソッドの最後で、への呼び出しの後drawComplexControl

于 2012-04-08T21:59:55.000 に答える