将信号发送到课外的抽象表模型

时间:2016-01-12 04:04:47

标签: python qt signals data-modeling pyqt5

我使用Python3 + PyQt显示SQLite3数据库。我想通过点击一个按钮在QAbstractDataModel中添加项目,该按钮在新窗口中提供了一个表单。根据我的理解,这意味着我必须将信号(rowsInserted或dataChanged)传递给现有的数据模型类,或者在类中执行将为我发出信号的方法。我想知道这样做的正确方法是什么。

我尝试了两种方法,两种方法都不起作用,而且我认为这一切都感觉有点太糟糕了#84; hack-ish"就像我用错误的方法使用一个好工具一样。有人知道如何使用QT5将信号从对话框传递到抽象数据模型吗?

顺便说一下,如果你不熟悉PyQt,但是你知道怎么用C ++做,请告诉我!到现在为止,我很乐意翻译。enter image description here

以下是我尝试的几个片段:

在我的submitItem类中:

renderData.append([name, eventType]) #changes the data
nrows=dataModel.rowCount(dataModel) #gives me the new row number
dataModel.dataChanged.emit(nrows) #Doesn't like integer (nrows)
# OR
dataModel.refreshData(nrows) # usually needs more arguments, or a QModelIndex to tell it where to refresh the data--it doesn't like just an integer like nrows.

这是我当前为renderData变量建模的dataModel类:

def refreshData(self, index, row):
        self.rowsInserted.emit(index, row, row) #needs another argument
        dataModel.rowsInserted.emit() #
        self.dataChanged.emit(index, index)

感谢任何帮助,希望这个问题有道理!

1 个答案:

答案 0 :(得分:1)

通常,您应该通过my_model.setData()方法的实现来修改模型。您对此方法的实现应发出dataChanged()信号,该信号需要绑定已更改数据的模型索引。

所以你需要咬紧牙关并创建一个或多个模型索引,这样你就可以发出期望作为参数的信号(你尝试发出这个信号,但是使用了明显失败的整数)。

要创建模型索引,我们访问c ++ docs :(对pyqt文档的Python开发更有用)

  

自定义模型需要为其他组件创建模型索引   使用。为此,请使用合适的行和列调用createIndex()   项目的数字,以及它的标识符,作为指针或   作为整数值。这些值的组合必须是唯一的   对于每个项目。

该页面上还有关于setData()的实施以及何时/如何发出dataChanged()的详细信息(参见“详细说明”和各个方法的详细信息)

您可能还想查看QSqlTableModel,这可能会否定您需要实施自己的模型?

相关问题