我有一个带有 QSqlRelationalTableModel 的 Qtableview 的表单。我希望其中两列是只读的,一列是组合框,一列是旋转框,但具有特定范围(没有负数。)
开箱即用,没有 QSqlRelationalDelegate,视图自动与第三列上的组合框和旋转框一起使用。在尝试将验证放入旋转框中,我发现它解决了前两列的只读问题。我唯一的问题是如何使用外键正确实现相关字段上的组合框。我已经能够显示一个组合框,但我看不到如何从外键填充选项。
如何填充组合框?
查看代码
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