我有一个带有Qtableview和QSqlRelationalTableModel的表单。我想要两个列只能读取,一个是组合框,一个是旋转框,但具有特定范围(没有负数。)
没有QSqlRelationalDelegate的开箱即用,视图在第三列和一个旋转框上自动使用组合框。在尝试将验证放入spinbox时,我发现它解决了前两列的readonly问题。我唯一的问题是如何使用外键在相关字段上正确实现组合框。我已经能够显示一个组合框,但是我无法看到如何从外键中填充选项。
如何填充组合框?
参见代码
def setup_rates_view(self):
self.rates_model = QSqlRelationalTableModel(self)
self.rates_model.setTable("rates_stay")
self.rates_model.setRelation(6, QSqlRelation("rates", "rate_code", "rate_description"))
self.rates_model.setFilter("id_bookings = '{0}'".format(myapp.res_id))
self.rates_model.setHeaderData(1, Qt.Horizontal, "Date")
self.rates_model.setHeaderData(2, Qt.Horizontal, "Basis")
self.rates_model.setHeaderData(6, Qt.Horizontal, "Code")
self.rates_model.setHeaderData(4, Qt.Horizontal, "Amount")
self.rates_model.select()
self.rates_view = self.ui.rates
self.rates_view.setModel(self.rates_model)
self.rates_view.setItemDelegate(QSqlRelationalDelegate(self.rates_view))
self.rates_view.setColumnHidden(0, True)
self.rates_view.setColumnHidden(3, True)
self.rates_view.setColumnHidden(5, True)
self.rates_view.horizontalHeader().moveSection(4,6)
self.rates_view.resizeColumnsToContents()
self.rates_view.setItemDelegate(Viewrates(self))
class Viewrates(QSqlRelationalDelegate):
def __init__(self, parent=None):
QItemDelegate.__init__(self)
def createEditor(self, parent, option, index):
if index.column() == 4:
spinbox = QSpinBox(parent)
spinbox.setRange(0,10000)
return spinbox
elif index.column() == 6:
combo = QComboBox(parent)
combo.setModel()
return combo