问题标签 [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.
c++ - 如何在 QAbstractItemModel 中设置 QCheckBox?
我有一个模型
TreeItem
我用我的排除列==1的实例填充。在第 1 列中,我创建了CheckBoxes
:
我可以将这些 CheckBoxes 雕像设置为Qt::Checked
orQt::Unchecked
但我的问题是:
稍后单击它们时我无法更改它们(但是setData
用适当的index.column==1
and调用role==Qt::CheckStateRole
)。我见过的例子ItemDelegate
- 只有这似乎有效。这是真的?在这种情况下我必须使用委托吗?
这是我的setData()
功能:
qt - QTreeView & QAbstractItemModel & insertRow 细节理解
我已经根据 editabletreemodel 示例以及此处的建议实现了我的 QTreeView & QAbstractItemModel :QTreeView & QAbstractItemModel & insertRow。
它工作,好的。但是有一个我不明白的区别。
为了让我的应用程序在插入子行时正常工作,我必须发出 layoutChanged()。我不得不。如果我不发出 - 插入一个孩子效果不好:一个新孩子正确出现在模型中,它被正确保存(当我保存时),但它没有显示在视图中。
editabletreemodel 示例不包含“emit layoutChanged()”,它可以很好地插入孩子。
这是我的 QAbstractItemModel 兄弟类的 insertRows 方法:
它几乎就像可编辑树视图示例中的那些,唯一的区别是发射。
告诉我为什么?
我想了解,为什么我需要发出 layoutChanged(),而 editabletreeview 不这样做。如果有人能解释这一点,将不胜感激。
我不需要理解为什么要发射。我需要了解为什么我需要发出和 editabletreeview 不需要它。
c++ - QAbstractItemModel 与 QSortFilterProxyModel 的奇怪交互
QAbstractItemModel 与 QSortFilterProxyModel 的交互有什么问题?在屏幕的左侧,我连接了 QAbstractItemModel 的实现,在右侧,我连接了 QSortFilterProxyModel。
UPD:上传代码:git@bitbucket.org:h0x0d9/myfilterproxymodel.git
代码:
标题:
drag-and-drop - QTreeView: Drag-And-Drop 调用 QAbstractItemModel::dropMineData 失败(源码在贴)
我正在构建一个带有树视图的应用程序,并创建了一个派生自 QAbstractItemModel 的模型。我可以通过拖放文件(将文件从应用程序外部拖到应用程序中)和在树中拖放项目来操作树。
问题是文件放到应用程序中并不总是有效,因为我重新实现了该功能mimeData(const QModelIndexList &indexes)
。有时且仅当树中有一个选定的项目(它为函数提供有效的项目索引mimeData
)时,文件删除不起作用,因为函数mimeData
被调用但函数dropMimeData
从未被调用。
我必须重新实现该函数mimeData
才能创建自己的 mimeData,该 mimeData 在树内拖放期间使用。这个 mimeData 用在函数dropMimeData
中,效果很好。
看起来mimeData
在文件删除期间不应调用该函数,因为应用程序已经知道 mimeData 格式:text/uri-list
。
我的函数dropMimeData
处理我自己的 mimeData 格式和text/uri-list
格式。
有没有人有同样的问题或对此有任何想法?再一次,它不像它根本不工作,它只是在某些时候失败。
任何帮助或想法都会很棒。
干杯。
以下可能完全不相关,这是我在尝试调试时遇到的。看起来可能与窗口的状态有关:QEvent::WindowActivate
或QEvent::WindowDeactivate
。在文件放置期间,窗口变为非活动状态并再次活动,但当窗口无法再次变为活动状态时似乎会出现问题。?
我添加了源代码来重现问题。将文件拖放到应用程序中。选择树中的项目。删除更多文件。有时滴不工作???
qt - 如何将 QHeaderView 部分的文本写入文件?
我正在尝试编写一个导出器,它接收 aQTableView
并将其所有数据写入 .csv 文件,以便可以在 MS Excel 中查看。
现在我似乎找不到从水平标题部分读取文本的方法。似乎没有类似QHeaderView::sections
或类似的方法,所以我无法访问 QHeaderView 的部分。有一个QHeaderView::count
尽管如此,这让我认为它们确实保存在某个容器中。
那么有没有办法获取部分的文本QHeaderView
?
c++ - 通知 QAbstractItemView 更改的最佳方式是什么
我有一个 QListView,它的模型(从 QAbstractItemModel 派生)根据 UI 中的某些标准定期更改。当视图本身认为在当前模型更新或模型更改时添加/删除了新行时,我希望收到通知。我需要这个通知,以便我可以调用 setIndexWidget 并在特定列下添加自定义控件。我不想重复调用 setIndexWidget 因为小部件的数量很昂贵。所以每行一次是理想的。
我已经尝试过 rowsInserted/rowsAboutToBeRemoved 和 dataChanged 但如果设置到视图中的模型已经包含项目,则不会调用它们。
任何想法将不胜感激。
c++ - 了解 Qt 视图模型架构:何时创建以及如何在 QAbstractItemModel 实现中清理索引?
我目前正在将我的项目从 迁移QTreeWidget
到QtreeView
,并且由于对 Qt 模型视图设计的理解不足而导致了很多问题。到目前为止,即使在 Qt 示例中我也找不到答案。
我已经实现了我的QAbstractItemModel
. QTreeView
我正在通过data
方法返回要查看的字符串。现在,底层数据将在运行时发生变化。为了处理这个问题,我的模型订阅了一个通知emit dataChanged(index(0,0), index(rowCount() - 1, LastColumn));
。问题是:如何创建和清理QModelIndex
对象?Qt 示例之一重新实现了index
方法,所以我做了同样的事情:
但是,该示例中的数据是静态的,在我的情况下,它在运行时会发生变化。我的index
实现是否正确?如果index
多次调用相同的坐标怎么办?我需要在发射之前以某种方式清理旧索引dataChanged
吗?
c++ - QTreeView:维护 QModelIndex 和底层数据之间的映射
我从迁移QTreeWidget
到QtreeView
. 显而易见的和微不足道的事情在QTreeWidget
视图中似乎是不可能的。具体来说:我有一个带有树视图的主窗口。TreeView 使用我已经实现的模型,但不是直接的——通过QSortFilterProxyModel
它被设置为树的模型。现在,用户激活树中的一个项目,主窗口接收到一个信号itemActivated(QModelIndex item)
。我如何知道基础数据中的哪一项被激活了?数据是一个向量,因此使用 TreeWidget 我可以将项目的向量索引存储在 中QTreeWidgetItem
,但QModelIndex
甚至没有setData
API。
qt - QTableView:如何在程序中编辑不可编辑的单元格?
这应该如何通过使用 model->setData() 方法调用来完成?
我从 QStandardItemModel 派生了一个名为“MyStandardItemModel”的类。通过覆盖受保护的虚拟标志方法,我使我的第三列和第四列不可编辑。事情是这样的:
完成此操作后,我无法编辑第三列和第四列中的单元格。
现在,我希望当我双击这些单元格时,会出现一个弹出对话框。我将修改该对话框的可编辑字段中的一些数据,然后将其复制回代码内的不可编辑单元格。
我试图为 QTreeView 编写一个 doubleclick() 处理程序,然后将一些数据复制到单元格中,以查看是否可以将数据复制到不可编辑的单元格中。
此操作失败,数据未写入不可编辑的单元格。
在这里您可以找到双击处理程序:
setData(..) 操作正在清除单元格中已写入的数据,但未写入字符串“AA”。请建议如何将一些数据复制到代码内的不可编辑单元格。
qt - Qt5 是否可以在没有指向模型的指针的情况下从组合框中检索项目的检查状态?
我知道当您可以访问QStandardItemModel
但使用combobox->model()
返回没有访问器的 aQAbstractItemModel
时,您可以做到这一点item(int row, int col)
。我已经尝试过使用QAbstractItemModel::itemData(QModelIndex)
但无法按我的要求工作。
我只需要获取项目的 CheckState,if(item.checkState() == Qt::Checked) etc...
编辑:我有这个代码,我可以将它转换为 QStandardItem 吗?