Делегат для QComboBox не работает для элемента по умолчанию

Я использую QComboBox для отображения некоторых MAC-адресов, которые приходят из базы данных в виде целых чисел. Для отображения их в более привычном формате "пунктирные октеты" я создал следующий QStyledItemDelegate:

class MacAddressDelegate(QStyledItemDelegate):

    def __init__(self):
        super(MacAddressDelegate, self).__init__()

    def _intMacToString(self, intMac):
        hexmac = ('%x' % intMac).zfill(12)
        return ':'.join(s.encode('hex') for s in hexmac.decode('hex')).upper()

    def setModelData(self, editor, model, index):
        macstr = editor.text().__str__()
        intmac = int(macstr.replace(':',''), 16)
        model.setData(index, intmac, Qt.EditRole)

    def setEditorData(self, editor, index):
        intmac = index.model().data(index, Qt.EditRole)
        if intmac.isValid():
            editor.setText(self._intMacToString(intmac.toULongLong()[0]))

    def paint(self, painter, option, index):
        # let the base class initStyleOption fill option with the default values
        super(MacAddressDelegate, self).initStyleOption(option, index)

        if option.state & QStyle.State_Selected:
            painter.fillRect(option.rect, option.palette.highlight())
            painter.setPen(Qt.color0)
        else:
            painter.setPen(Qt.color1)

        intmac = index.model().data(index, Qt.DisplayRole)
        if intmac.isValid():
            text = self._intMacToString(intmac.toULongLong()[0])
            painter.drawText(option.rect, Qt.AlignVCenter, text)

но когда я устанавливаю модель из QSqlTableModel и делегата QComboBox:

    # Setting model and delegate
    macRangesModel = QSqlQueryModel()
    macRangesModel.setQuery("select FIRST_MAC, ADDRESS_BLOCK_MASK from MacRanges")
    macRangesModel.select()
    self.initialMacComboBox.setModel(macRangesModel)
    self.initialMacComboBox.setItemDelegate(MacAddressDelegate())
    self.initialMacComboBox.setModelColumn(0)

он работает только для элементов в раскрывающемся списке, но не для элемента по умолчанию, отображаемого при закрытом списке (обратите внимание, что целое число 346868604928 соответствует MAC-адресу 00:50:C2:FA:E0:00):

Почему это происходит? Я знаю, если модель была редактируемой, значение по умолчанию должно быть показано в QLineEdit, но это не так, так как мы можем установить QItemDelegate для закрытого виджета QComboBox?

0 ответов

Другие вопросы по тегам