问题标签 [qabstractlistmodel]

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 回答
86 浏览

qt - 从另一个更新 ListView

我正在制作一个纸牌游戏,它有 4 个卡槽,每个卡槽容量为 5。我ListView用来代表每个插槽。让我先解释代码,然后再解释我的问题。

ClientCardModel具有将代码和其他成员传输到 QML的ClientCardfor和角色列表。ListView让我ListView用一个区域(如 zone1、zone2 等)来表示每个。在游戏中,一张卡可以与其他区域的其他卡一起装备。卡上装备的卡存放在 中QSet<> equipped,卡上装备的卡存放在 中equipTarget。当将鼠标悬停在区域中的卡片上时,应使用图像突出显示其他区域中装备它的卡片,直到鼠标停留在卡片上。

任何想法都值得赞赏。

0 投票
1 回答
613 浏览

qml - 从 QML 访问嵌套的 QAbstractListModel

QAbstractListModel在 C++ 中有一个分层(嵌套),即模型的项目是Outer模型的实例,Inner类的项目Inner是一些QObject派生的Data实例。Outer具有submodel访问Inner项目的角色。

相应的 QML 代码将 a 嵌套Repeater在 aListView中。ListView正确迭代类型的项目,我可以检索委托中模型实例Inner的项目计数。 我遇到的问题是just 不会迭代模型的实例。在 C++ 模型的方法中使用调试打印输出我看到InnerListView
RepeaterDataInner

  • QML 查询butrowCount()的实例Inner
  • QML 从不调用data().Inner

QML 代码如下所示:

0 投票
1 回答
677 浏览

qt - 这是 Qt Quick ComboBox 中的错误吗?

我用来在 Qt QuickQAbstractListModel中创建自定义模型。ComboBox头文件中的代码:

源文件中的代码:

我使用以下方法将其公开到 QML 中:

并使用此模型创建一个 ComboBox:

data()此代码运行完美,但请查看源文件函数中的这一行:

我认为在设置textRoleof之后ComboBox,显示角色应该命名为“显示”,这是Display我的自定义模型中的角色m_roleNames.insert(Display, "display");。但这并不总是正确的。

这是qDebug()<<上面代码的输出:

1
1
行 0 角色 260 大小 1
显示:“1.8.0_51 64bit”

1
1
行 0 角色 0 大小 1
显示:“1.8.0_51 64bit”

两个输出随机出现。您会发现role传递给data()函数的参数有时会为零零角色Qt::DisplayRole在 Qt中的意思。

所以这是我的问题:如果 set textRoleofComboBox意味着data role设置等于 textRole 的值。为什么data role有时会变成 Qt::DisplayRole?它是一个错误ComboBox吗?

0 投票
0 回答
282 浏览

qt - QComboBox 选择时和下拉菜单中的不同项目值

如何轻松制作双人 QAbstractListModel × QComboBox(不重新实现 QComboBox)

这样选择时的项目表示与 DropDownList 上的表示不同

背景:

我有模型(继承自QAbstractListModel),它使其他模型派生的QAbstractItemModel变平,但是它代表结构

项目的顺序与树模型中的顺序相同

我想缩进它们,以便更好地选择方向,

但是一旦选择,它看起来很奇怪,当唯一选定的项目缩进时

即具有这种结构(我逐字假设它在 QComboBox DropDown列表中被看到

并且一旦选择,我希望它只显示

现在它显示

---> subChild 1.3.2

据我所知,这两种表示都通过 model::data(index, role=Qt::DisplayRole),所以我无法在那里区分它们

PS:如果有一些类似 QComboBox 的直接使用包含树的模型,那就更好了

0 投票
0 回答
54 浏览

c++ - QAbstracktListModel 由 QAbstractListModel 组成。如何实施?

我需要 List witch 包含列表。它不是一棵树。所以问题是我需要从 QML 动态获取新的数据模型。我可以QAbstractItemModel在 in 中实现和使用TreeView吗?如何实施?我的想法为零(

0 投票
2 回答
3171 浏览

c++ - QML - 实现 C++ ListModel 的最佳方式

目前我在 QML 中定义了一个 ListModel,每个 ListElement 中有许多不同的字段。委托根据“myType”值以不同的方式做出反应。

当 ListView 组件完成后,我从名为“Config”的 C++ 类中读取了一些配置值。

当 listView 完成后,我需要将编辑后的数据传递给 C++。所以我意识到这不是在 QML 中构建模型的最佳方式。所以我计划用 C++ 创建模型,但我以前从未这样做过。所以我的问题是:哪种模型结构最适合这个用例,但设置起来不太复杂?

还是有另一种不太难看的方法将 QML 模型中的数据放到 c++ 上下文中?

0 投票
1 回答
2474 浏览

c++ - removeRows() 和 QPersistentModelIndex

我已经实现了我自己的QAbstractListModel,它基于std::vector. 我现在想在QGraphicsScene. 为此,我实现了我自己的QGraphicsItem,它将 a 存储QPersistentModelIndex为指向数据的指针。

我已经实现了removeRows如下方法:

现在由于我擦除了一些元素,因此以下元素的索引将发生变化。因此QPersistentModelIndex需要进行调整。

我已经找到了changePersistentIndex()方法,QAbstractItemModel并且我知道我可以使用persistentIndexList(). 但是我不知道如何使用这种方法相应地调整索引。如何才能做到这一点?

更改这些索引是否足以防止Invalid index错误?

更新

我已经removeRows()用@Sebastian Lange 的增强功能改变了它,但是它仍然没有按预期工作并且我收到Invalid index错误:

发出的错误如下所示(删除第 7 个元素时):

0 投票
1 回答
625 浏览

qt - Qt QAbstractItemModel 函数 data() 以未定义的角色调用

我想使用创建自定义列表QListView,因此我必须扩展QListViewQItemDelegate然后QAbstractListModel实现特定方法,以及QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const. 乍一看它在屏幕上正确显示,但在填充列表模型后出现问题。,该函数被每个具有不同角色data(index,role)的项目模型调用 4-5 次(其中一些未定义角色/超出范围/可能是随机的)。而且它不仅发生在列表模型初始化之后!当我悬停一个列表元素时,视图会使用正确的索引和角色调用 data(index,role),但之后会再次使用意外的角色值调用它。

这似乎是一种尴尬的行为。我找不到奇怪电话的来源。我将日志放入自定义类的每个方法中,以确保我不会错误地调用data(index,role)具有错误值的方法。

有没有人有一些想法在哪里看或为什么会发生这种奇怪的电话?

编辑 “奇怪”调用的来源在:

以某种方式调用QItemDelegate::sizeHint()它时会触发data()具有不同角色值的触发器。

在我的例子中,我定义了从 0(0,1,2,3) 开始的角色值。根据@Jens,这些值是保留的。更改自定义角色的起始值解决了我的问题。

0 投票
0 回答
338 浏览

c++ - 如何将 QAbstractListModel 中的项目信号绑定到 ListView 委托中的处理程序

我有一个QAbstractListModel后代类,MyItem里面有我的任意类型的实例列表。我也有一个ListView与该QAbstractListModel后代绑定的模型。

我要做的就是将委托中的处理程序绑定ListView到我的任意类型的信号MyItem。有什么办法吗?

UPD。我不想将委托绑定到模型的信号,所以当我有很多项目时,所有项目都会被触发。我只想用信号通知一位代表。

0 投票
1 回答
858 浏览

c++ - QAbstractListModel 到 Combobox,如何在选择值 b 时获取值 a

我做了非常简单的 QAbstractListModel 例子。这个例子也在这个链接上展示:http: //doc.qt.io/qt-5/qtquick-models-abstractitemmodel-example.html。一个程序结果是这样的:

程序结果 我在 view.qml 上做了一点改变,像这样

在这里,Combobox 显示动物类型。但我想在 onCurrentTextChanged 事件时写入“大小”值。但我无法获得类型值。