以下は、カスタム委任の例ですQComboBox
。選択を行い、クリックアウト (または でフォーカスを失うQComboBox
) し、TAB で戻る (フォーカスを得る) と、元の選択が失われます。たとえば、以下のコードを使用して を選択"Item 2"
し、クリックしてから TAB で戻ると、選択が元に戻ります"Item 1."
どうすれば選択を維持できますか?
この問題が発生するのは、クラスが初期化されるたびにクラスで使用addItem()
しているためです。ただし、このメソッドにどのようにアプローチする必要があるのか よくわかりません。TheEditor
QComboBox
代わりに、フォーカスされるたびにではなく一度だけ初期化されるようTheEditor
に、クラスで初期化する必要がありますか? EditDelegate
__ init __
どうすればそれを適切に行うことができますか?
import sys
from PySide import QtCore, QtGui, QtSql
class EditDelegate(QtGui.QStyledItemDelegate):
def __init__(self, parent=None):
super(EditDelegate, self).__init__(parent)
def createEditor(self, parent, option, index):
editor = TheEditor(parent)
return editor
class TheEditor(QtGui.QComboBox):
def __init__(self, parent=None):
super(TheEditor, self).__init__(parent)
self.addItem("Item 1")
self.addItem("Item 2")
self.addItem("Item 3")
self.setEditable(True)
class TheTable(QtGui.QTableWidget):
def __init__(self, columns, parent=None):
super(TheTable, self).__init__(parent)
self.setItemDelegate(EditDelegate())
self.setEditTriggers(QtGui.QAbstractItemView.AllEditTriggers)
self.setColumnCount(1)
self.setRowCount(1)
self.setHorizontalHeaderLabels(["QCombo"])
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setCentralWidget(TheTable(self))
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
frame = MainWindow()
frame.show()
app.exec_()
注: PySide v1.2.0