【问题标题】:Qt Table Model column overridingQt 表模型列覆盖
【发布时间】:2013-10-29 08:41:28
【问题描述】:

我有 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 模型/视图的新手,因此感谢任何建议和示例。 我可能完全错了。

谢谢。

【问题讨论】:

  • 不清楚你在这里问什么
  • @urkon 你想在每一行的复选框被切换时调用一个特定的函数吗?
  • @AngryDuck 我已经更新了案例。
  • @Zaiborg 是的。我想在切换时调用一些函数。但不是直接在按钮上,而是在模型值更改上。如果可行的话。通常我会使用单击按钮,但在这种情况下,我将不得不更改其他代码。

标签: c++ qt model-view-controller model


【解决方案1】:

好的,如果我说对了,你的新玩具可能是QSignalMapper

有了这个东西,您可以连接任何QWidget -> 在这种情况下,您插入模型的组合框项目

另一方面,当您更改模型中的某些内容(例如表中的值)时,您需要连接到该信号,并且可以通过使用 QAbstractItemView::indexWidget ( const QModelIndex &amp; index ) 轻松获取底层 QModelIndexQComboBox

【讨论】:

  • 这可能是升级 GUI API (TableView) 解决方案的一部分。这绝对是我在这个谜题中必须使用的玩具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多