问题标签 [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.

0 投票
1 回答
9122 浏览

qt4 - 在 QTreeView 上的子项上设置小部件

多亏了这个线程QAbstractItemView,我能够将小部件添加view.

但是是否可以将小部件添加到子项?

这是我尝试过的部分进展顺利:

treeview_nest.ui可用。

您在下图中看到该项目child没有显示按钮并且其父按钮被覆盖。显然我不知道如何为它编写代码。

在此处输入图像描述


更新)我想出了如何为孩子添加小部件。棘手的是,使用QStandardItem.insertRow与 index 结合可以完成工作。在我上面的示例代码中,替换_add_widget为以下内容:

我确信这不是最好/理想的设计方式,但似乎对我有用。在受到@Phlucious 回答的启发后,我提出了这个想法。谢谢!

在此处输入图像描述

0 投票
2 回答
7620 浏览

qt - Qt模型/视图和QTableView的基本概念

我想创建一个软件来浏览一些数据库表并且用户将能够编辑这些表。在阅读此链接之后,我认为模型/视图是满足我需要的好方法。看看下面的模型: 在此处输入图像描述

知道了这一点,我有一些问题要确保我理解这个概念。请告诉我我是否朝着好的方向发展:

  1. 我想我需要为每个表创建一个模型类?(子类化 QAbstractModel)。它看起来像这样:

    /li>
  2. cityTableModel 构造函数会从数据库中的表中获取数据吗?

    /li>
  3. 我需要为每个不同的模型子类 QTableView 吗?

    /li>
  4. Finnaly,我猜 view.setData 和 view.setModel 需要重新实现?setModel 将遍历每个模型行以构建 QTableView,而 setData 将执行适当的查询以在模型中添加新数据?

非常感谢你。

0 投票
1 回答
508 浏览

qt - QTextEdit 和 QPushButton 在一个 QAbstractModelItem

我使用 QTreeView 来可视化我的对象属性。它类似于 Qt 设计器中的属性编辑器。我有各种值,布尔值,文本,颜色值,枚举,浮点数,整数,文件名等。

我使用自定义模型来保存所有对象值并通过自定义委托显示它。因此,委托检测数据的类型并具有用于编辑的特殊表示,例如用于 int/float 的 Spinboxes 和用于 bool 的复选框。目前,我的代表为例如旋转框创建编辑器并覆盖paint() 函数以将值表示为复选框。

现在我想允许用户以两种方式编辑一个值。用户应使用普通文本字段进行编辑、复制/粘贴等来更改值或按下按钮打开 QFileDialog 并选择正确的文件。
它应该如下图所示:

图片

我怎样才能做到这一点?
我需要一个文本字段和一个按钮来打开 QFileDialog。

我使用 Qt 5.0。谢谢帮助

0 投票
1 回答
2760 浏览

c++ - 从 QAbstractItemModel 子类化时的拖放支持

我从 子类化QAbstractItemModel,将模型放入QTreeView,一切都很好。

现在我想支持拖放,所以可以用鼠标改变项目位置。
我将QTreeView dragDrop模式设置为DragDrop, defDropAction MoveAction,drag启用为真。我可以拖动项目,它出现在鼠标附近,但放置时没有任何反应。

我需要哪些方法QAbstractItemModel来实现我的模型将支持拖放?

0 投票
1 回答
10533 浏览

qt - 如何从 qml 访问 ListView 的当前项

我有一个存储和编辑笔记的应用程序。笔记列表显示在列表视图中,如下所示:

注释项是一个 NoteListModel,它是 QAbstractListModel 的子类并包含 NoteListItems。我想要做的是存储当前选择的 NoteListItem,这样当用户想要保存修改后的笔记时,我可以轻松地访问里面的 Note 对象。但是,我不知道如何从 qml 委托访问支持的 NoteListItem。modelData 似乎是别的东西。有什么办法吗?如果我可以将 Note 对象包装在 QVariant 中,我可以通过角色轻松访问它,但是当我这样尝试时

它导致编译器错误说

qmetatype.h:642:错误:“sizeof”对不完整类型“QStaticAssertFailure”的无效应用

或者我应该尝试从支持代码访问选定的列表项?有什么办法吗?你有什么想法吗?

谢谢你的时间。问候,彼得

0 投票
1 回答
16629 浏览

qt - 何时从 QAbstractItemModel 发出 dataChanged

在 Qt 中,我有一个模型子类QAbstractItemModel化——它是一个显示在 QTreeView 中的树。

该模型支持各种形式的变化,它们都可以正常工作。相关的两个是:

1)少量相关行中的一些数据发生变化

2)可视化更改意味着大多数行应更改其格式 - 特别是它们具有背景突出显示的更改。他们的DisplayRole数据不会改变。

当前的设计以相同的方式处理这两种情况:对于模型发出的任何更改的每一行dataChanged(start_of_row_index,end_of_row_index)。我为改变的父行和改变的任何子行发出信号。

然而,当模型变大时,这在案例 2 中表现不佳:发出了大量的dataChanged信号。

我已经更改了代码,以便在情况 2 中模型dataChanged仅针对作为整个树的父级的(单)行发出。

这似乎仍然可以正常工作,但不符合我对模型职责的理解。但我怀疑我可能错了。

也许我误解了dataChanged信号?它实际上是否会导致视图更新所有子项以及指定范围?或者我可以避免dataChanged在没有DisplayRole变化的情况下发射吗?

编辑了我到目前为止的进展

正如 Jan 指出的那样,dataChanged在案例 2 中,我应该为大多数或所有行发出。

我的代码最初是通过dataChanged为每个更改的行发出信号来做到这一点的,但这太昂贵了——视图处理所有这些信号的时间太长。

一种可能的解决方案可能是dataChanged为任何连续的更改行块聚合信号,但这仍然不能很好地执行,例如,当每隔一行发生更改时 - 它仍然会发出太多信号。

理想情况下,我只想告诉视图将所有数据视为可能已更改(但所有索引仍然有效 - 布局未更改)。对于单个信号,这似乎是不可能的。

由于QTreeView该类的一个怪癖,dataChanged(tl,br只要tl != br. 我有这个工作,它通过了我们的测试,但让我很紧张。

我现在已经确定了一个版本,它遍历树并为每个父级发出一个dataChanged(tl,br)(tl,br 跨越该父级的所有子级)。这符合模型/视图协议,对于我们的模型,它通常将信号数量减少约 10 倍。

然而,这似乎并不理想。还有其他建议吗?

0 投票
1 回答
557 浏览

qt - 子类化 QAbstractItemModel 时,QTreeView 中没有显示任何内容

我正在尝试使用简单的树模型,但我无法使该示例在我的项目中工作。

首先,我可以毫无问题地使用 QTreeView 和 QStandardItemModel。在以下情况下,我可以看到我的 QTreeView 里面有数据。查看工作代码:

现在,以下代码不起作用。我正在尝试对模型进行子类化。在这种情况下,QTreeView 显示出来但完全是空的。有一些我想我不明白的地方。

0 投票
1 回答
702 浏览

qml - QT5,QAbstractItemModel 到 QML 的分层

我是 C++ 的新手,很抱歉可能会出现奇怪的问题。我有一个 QT 学习任务和一些入门问题:

我必须从 txt 中提取一些数据,将它们放入 QT 的数据库/模型中,并使它们在 QML 界面中可编辑。

我提取的数据例如(三个示例):

名称:NAV.brake.radius
值:7
描述:导航制动圆半径 [m]

名称:NAV.slowdown.radius
值:20
描述:导航减速圆半径 [m]

名称:CTRL.use.acc
值:yes
描述:CTRL 使用加速度计


我的主要问题是:我应该在哪里存储提取的数据?

我应该将“名称”存储在 QString 中,将值存储在 QVariant 中,将描述存储在 QString 中,将它们全部放在“数据”类中,并以某种方式将数据存储到 AbstractItemModel 中吗?还是使用 QStandardItemModel ?

我真的很难找到工作的入口。可能你们中的一些人有关于如何使用模型存储或连接数据的提示吗?

最好的祝福加利

0 投票
1 回答
2102 浏览

qt4 - 使用多列树视图实现 QAbstractItemModel

我正在尝试为多列树视图实现 QAbstractItemModel 每一列都是一个 qstring 但到目前为止 GUI 中没有数据出现并且不知道为什么,请帮助

==================================================== ==============================

0 投票
1 回答
9540 浏览

python - 带有自定义项的 QTreeView

我正在使用 PySide 编写我的第一个 Qt 应用程序,并且在创建自定义树视图时遇到了一些麻烦。我想在一列中列出我自己的数据。每个项目都必须有带有工具提示的文本、不同的文本颜色、不同的背景颜色、带有操作和工具提示的图标。

默认树有效。我有视图:class TreeView(PySide.QtGui.QTreeView): 和模型:class TreeModel(PySide.QtCore.QAbstractItemModel):

如何为我的项目添加不同的图标?

这是我的例子: