1

我有一个带有 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
4

0 回答 0