问题标签 [qabstractitemmodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - 如何将 QAbstractTableModel 和 QItemDelegate 组合到一个工作源?
我QTableView
在 UI 文件中有一个定义。下图:
我想用小部件进行月份更改(红色数组指向的地方)QComboBox
,处理委托,但对我来说,对于我的自定义委托和模型来说,这是一个太复杂的问题,我不知道出了什么问题?!
问题:在我看来,QAbstractTableModel
不能使用QItemDelegate
,因为我无法将我的自定义简单ComboBoxDelegate
小部件与 QTableView 结合起来。什么?
这是我所拥有的:
我的自定义委托标头/源数据:
模型数据:
之后,我像这样制作了 init 委托:
PS:很抱歉输出很长,但我认为如果所有来源都在这里显示会更好。
谢谢!
c++ - 如何使用 QCombobox 的模型
我想 QCombobox
用作inCombobox
的一个。所以我需要 用来拿我的物体。我怎样才能在 QCombobox 中保存我的对象。(我认为我应该在模型中保存数据,因为是根据 MVC 模式设计的......)任何帮助将不胜感激。Swing
Java
Model
QCombobox
qt - pyqt:试图了解 QAbstractDataModel 和 QTreeView 的插入行
我正在使用 PyQt 使用 QAbstractItemModel 管理树视图。到目前为止,我已经成功地实现了它,以便我可以加载数据、展开和折叠它以及编辑值。
然而,我无法做的一件事是围绕插入和删除行。
我正在尝试做的简短版本:
当用户编辑特定单元格时,我需要实际删除对象层次结构中的底层项目并将其替换为不同的项目。我在模型的 setData 方法中实现了这一点。由于我不完全理解我在做什么,我似乎已经设置它以便它出现段错误。
基本上,我只需要更好地了解数据模型如何与 QModelIndex 交互,但阅读和重新阅读文档似乎并没有启发我。任何帮助(或任何链接到一个体面的教程 - 最好,但不一定,在 python 中 - 也将不胜感激)。
这是我正在使用的代码示例:
c++ - QAbstractItemModel 和 QTreeView
我需要在 QtreeView 中显示自己的数据模型的工作示例(c++)。
c++ - 如何获取 QSqlTableModel 的列名?
我想要像 QString QSqlTableModel::getColumnName(int col) 这样的东西。
c++ - 如何让 Qt 委托编辑器“粘性”
我正在将应用程序从本地 UI 迁移到 Qt。最重要的控件之一是属性面板,它接受一个实现我的反射 API 接口的对象,并弹出一个对话框,其中包含所有属性的编辑器。
我QAbstractItemModel
为我的属性系统编写了一个实现,并为QTableView
. 我还编写了一个QItemDelegate
为属性创建编辑器。
问题是我希望编辑们闲逛,而不是严格的弹出窗口。这样他们就可以处理属性的呈现,需要更少的点击来操作,并且不会在其他东西获得焦点时立即消失,例如我的颜色按钮 - 编辑器(具有监听颜色变化的插槽)消失一旦颜色选择器对话框出现,这意味着没有任何东西在监听变化。
我找不到任何让编辑坚持的选项。我在这里吠叫错误的树还是有更合适的方法?我试图以“Qt”的方式做事,但我已经碰壁了。
谢谢,
c++ - 创建 QAbstractModelItem 的代理
我正在编写一个 Qt 应用程序以允许对非常重的数据集进行可视化。
所以,我有一个SourceDataModel
类,从它继承QAbstractItemModel
似乎工作正常(目前,我只在 QTableView/QTreeView 中显示它,但稍后,我将创建一些自定义视图)。
现在,我希望能够过滤这些数据,即
能够具有不同的数据分辨率(即仅公开 2 个数据项中的 1 个)
能够对数据应用一些过滤器(即将 unix 时间戳显示为 dd/MM/yyyy hh:mm:ss)
所以我开始创建一个ProxySourceDataModel
类,它继承自我的SourceDataModel
并存储一个实例,基本上将所有内容委托给该实例。由此ProxySourceDataModel
,我注意到在QTableView
. 经过一番调查,似乎是因为我必须从底层转发信号和插槽SourceDataModel
。没问题,我做到了。
但仍然存在 2 个问题,我不知道如何处理它们:
我无法在视图中选择数据。如果我
SourceDataModel
直接使用,没有问题。但是使用ProxySourceDataModel
i 不能选择任何东西。数据根本没有过滤!我在中重载了 data()
ProxySourceDataModel
,并将所有其他调用转发到底层SourceDataModel
。但仍然,只有SourceDataModel::data()
被调用。
这是一些代码来说明我在做什么:
非常感谢任何帮助或建议,感谢阅读!
- - - - - - - - - - 编辑 - - - - - - - - - - - -
我找到了!
问题是视图不使用QAbstractItemModel::data()
它的模型,而是调用QModelIndex::data()
它的项目,这反过来又调用QAbstractItemModel::data()
了项目的底层模型。而且由于我的代理从底层模型返回模型索引,这就是为什么SourceDataModel::data()
总是调用 ! 而不是ProxySourceDataModel()
!
我只是重新实现ProxySourceDataModel::index()
以返回本地索引,它就像一个魅力。访问在 QT 中,链接模型无法按预期工作以获取更多信息。
谢谢!
c++ - 如何使我的 QAbstractTableModel 与我的数据存储保持同步?
在我的应用程序中,我有一个用于保存项目列表的类:
项目操作函数(添加、更新、删除)在完成时发出相应的信号(项目添加、更改、删除)。我有一个此类数据库的列表和一个用于显示其内容的 QTableView。我还有一个自定义的 QAbstractTableModel 派生模型类的对象,可以在需要时指向(并显示)不同的数据库:
我在使模型反映对其当前数据库的更改时遇到问题。以前,我通过每次在数据库中发生更改(由从数据库到 DatabaseModel 的信号触发)时发出模型重置来使其工作,但我认为这太过分了。现在我不知道如何正确连接数据库和模型。
将数据库信号连接到模型并使模型发出 dataChanged() 不起作用,因为数据库中的项目数(以及模型的行数)正在发生变化。QAbstractTableModel 中有称为 rowsInserted() 和 rowsRemoved() 的信号,但文档说它们不能在自定义类中使用。有要重新实现的虚函数称为 removeRows() 和 insertRows(),但文档说我必须在其中调用 begin(Remove|Insert)Rows() 和 end(Remove|Insert)Rows(),这会导致两个问题:
- begin...Rows() 需要一个 QModelIndex 'parent' 参数,我不知道该使用什么
编辑:实际上没关系,现在我为此传递 QModelIndex() 。QAbstractTreeModel 使用它来识别树中的父节点,显然对于表模型来说不是必需的。 - 文档说在更改底层数据存储之前需要调用这些函数
如何使模型与数据库保持同步?谢谢!
sql - QTreeView 和 QSqlQueryModel -- 根据需要从 sql 数据库中加载子项
我有以下问题。
我正在尝试为我的 QTreeView 实现一个模型,该模型将从 sql 表中动态加载数据。
表如下所示:
id_parent 包含父记录的 id - 因此它们形成一个结构。
我希望我的模型仅在需要时才从该表中加载数据。换句话说,我不想将完整的结构加载到内存中,而是不想只读取用户打开的那些节点的子节点。
QSqlQueryModel 和 QSqlTableModel 似乎只适用于平面表。
我认为解决此问题的一种方法是实现自定义 QAbastractItemModel 类并在内部为每个打开的节点(包括顶级不可见父节点)存储单独的 QSqlQueryModel 实例。然后重写每个方法并将请求转发到适当的模型。
也许有一些更简单的解决方案?:-)
感谢帮助。
qt - 在 QTableView 列中显示 QAbstractListModel 项
我一直在玩弄Qt并遇到了一个小问题。
我想将图片列表显示为图标表。现在,我通过继承 QAbstractTableModel并将其插入QTableView的子类来做到这一点。
在我看来,这会使代码、模型和视图过于复杂(尤其是在尝试编辑/附加项目时)。当尝试将模型实现为QAbstractListModel时,项目将显示为表格行。
有没有办法让 QTableView 将项目显示为列?
编辑:使得项目从左到右呈现在单行中,并包装到新行。
还是在任何情况下都最好将表模型用于表视图并解决这些问题?
值得一提的是,我正在使用基于 Qt Jambi 的 Qt 的 C# 绑定。