0

我有模型的 SourceTable(QAbstractTableModel 类型),应该通过 QSortFilterProxyModel 表示,它是 GUI api 的一部分。

其中一列是复选框,它应该代表行的状态,但它也应该用于触发状态更改:

unchecked ---check---> checked

在检查操作时,我必须向服务器发送消息。然后,服务器通过 SourceTable (QAbstractTableModel) 将此检查信息发送回。然后应锁定检查以供用户干预。

-------------         ---------------    signal    -----------------------   -------
|SourceTable|---//--->|newProxyModel|  <---------- |GUI sort/filter proxy|---|TView|
-------------         ---------------  ----------> -----------------------   -------
    ^                        |
    -----message to server----

我应该以某种方式从 newProxyModel 获取/设置/提升 GUI 中数据更改的信号。这就是为什么 newProxy 中的“复选框”列应该被“覆盖”。

由于使用装饰器破坏了架构,我正在考虑插入另一个应该管理此列行为的代理模型。这条路好走吗?

我想知道这是否可行,以及从 GUI 模型(QSortFilterProxyModel)和服务器 SourceTable(QAbstractTableModel)拦截用户活动的简单/正确方法是什么

由于我是 Qt 模型/视图的新手,因此感谢任何建议和示例。有可能我这样做完全错误。

谢谢。

4

1 回答 1

1

好的,当我说对了,你的新玩具可能是QSignalMapper.

有了这个东西,您可以将任何QWidget-> 在这种情况下,您插入模型的组合框项目 <- 连接到发出信号的单个容器,您可以在其中确定哪个对象发送信号和自定义附加信息(例如行)

另一方面,当您更改模型中的某些内容(例如表中的值)时,您需要连接到该信号,并且可以QComboBox使用QModelIndexQAbstractItemView::indexWidget ( const QModelIndex & index )

于 2013-10-29T10:25:11.763 回答