首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将小部件添加到Qsqlquerymodel

将小部件添加到Qsqlquerymodel
EN

Stack Overflow用户
提问于 2013-02-16 15:59:10
回答 1查看 917关注 0票数 1

我想将一列复选框添加到Qsqlquerymodel中。复选框没有链接到数据库。对于我想要做的事情,使用代表似乎太低了。

我想使用的代码将基于(PyQt):

代码语言:javascript
复制
model = QtSql.QSqlQueryModel()

model.insertColumn(2) #checkbox column

checkboxes = list() #Used later to check checkboxe state
for i in range(0, model.rowCount()):
    checkboxes.append((i, QtGui.QCheckBox())) #store row and checkbox in list
    model.addWidget(i, 2, checkboxes[-1][1]) #addWidget in row(i), col(2) does not exist :(
  • 是否可以不使用委托,这样代码就更简单了?
  • 我应该使用布局而不包括模型中的复选框吗?
  • 我错过了一个简单的解决方案吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-10 16:54:33

我通过子类QsqlQueryModel来管理西比尔·科奇安工作。

代码语言:javascript
复制
class CheckboxSqlModel(QtSql.QSqlQueryModel):
    def __init__(self, column):
        super(CheckboxSqlModel, self).__init__()
        self.column = column
        self.checkboxes = list() #List of checkbox states
        self.first = list() #Used to initialize checkboxes

    #Make column editable
    def flags(self, index):
        flags = QtSql.QSqlQueryModel.flags(self, index)
        if index.column() == self.column:
            flags |= QtCore.Qt.ItemIsUserCheckable
        return flags

    def data(self, index, role=QtCore.Qt.DisplayRole):
        row = index.row()
        if index.column() == self.column and role == QtCore.Qt.CheckStateRole:
            #Used to initialize
            if row not in self.first :
                index = self.createIndex(row, self.column)
                self.first.append(row)
                self.checkboxes.append(False)
                return QtCore.Qt.Unchecked
            #if checked
            elif self.checkboxes[row]:
                return QtCore.Qt.Checked
            else:
                return QtCore.Qt.Unchecked
        else:
            return QtSql.QSqlQueryModel.data(self, index, role)

    def setData(self, index, value, role=QtCore.Qt.DisplayRole):
        row = index.row()
        if index.column() == self.column and role == QtCore.Qt.CheckStateRole:
            if value.toBool():
                self.checkboxes[row] = True
            else:
                self.checkboxes[row] = False
            self.dataChanged.emit(index, index)
            return True
        else:
            return False
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14912192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档