问题标签 [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 回答
930 浏览

python - PyQt5 和 QAbstractListModel::columnCount

QTreeView 忽略从 QAbstractListModel 继承的类的 columnCount() 并且只显示第一列:

相关的 C++ 代码工作正常。

我究竟做错了什么?

0 投票
2 回答
278 浏览

qt - 如果模型更改,ListView 是否会重绘底层模型?

问题基本上是标题,但更详细:

我已经对 进行了子类化QAbstractListModel,我们来命名它myModel。我正在myModel用 c++ 代码创建内容,然后将其输入到ListViewQML 中。我的代码myModel在 C++ 代码中进行了修改,我可以立即在我的 中看到修改ListView,这很好。我的问题是,ListView当底层模型更改(如添加项目)或仅绘制新项目时,是否会重绘所有元素?

0 投票
1 回答
1392 浏览

qml - 如何将自定义对象定义为 QAbstractListModel 中的角色?

我的问题是,如何将自定义对象指定为派生模型中的角色,QAbstractListModel以便在将其可视化时ListView可以访问其成员变量。这里有一个例子是一些简单的代码示例:

这是代表我的自定义对象的类:

这就是我派生的被覆盖data()函数现在的样子(但它不起作用):MyModelQAbsractListModel

在这里,我指定了角色名称MyModel

这就是我ListView在 QML 代码中的样子,以及我想如何访问MyCustomObject委托中的成员变量的示例:


EDIT1:=> 修复所需的复制构造函数

当我在我的下添加 Q_DECLARE_METATYPE 时,MyCustomObject我收到以下错误:


编辑2:

所以我添加了@Evgeny 建议的所有必要功能。我的代码现在编译没有错误,但我在运行时收到一个 qml 错误说: TypeError: Property 'getType' of object QVariant(MyCustomObject) is not a function

我已经Q_INVOKABLE在方法前面添加了getType(),我还MyCustomObjectpublic QObject. 我在头文件Q_DECLARE_METATYPE的底部添加了。MyCustomObjectMyCustomObject我调用的构造函数中qRegisterMetaType<MyCustomObject>("MyCustomObject"),在我main注册的类中也像这样qmlRegisterType<MyCustomObject>("com.test.mycustomobject", 1, 0, "MyCustomObject")

这是MyCustomObject现在类的样子:

这就是我派生的被覆盖data()函数现在的样子:MyModelQAbsractListModel

我最初发布的所有其他功能都是相同的。

0 投票
1 回答
2398 浏览

qt - 如何在基于 QMap 的 QAbstractListModel 中找到特定行的索引?

QAbstractListModel我有一个基于QMap<QUuid, CustomObject>ListView在 qml 中可视化的类的派生类。在我的应用程序运行期间的某个时间,我会根​​据它的QUuid. 当我进行删除时,我想调用它,beginRemoveRows以便ListView通知它的内容正在更改并且需要重新绘制自身。如何找到正确的索引beginRemoveRows

0 投票
4 回答
2110 浏览

qt - 如何确定当前项目是否是 ListView 部分中的最后一项

因此,当我绘制我的ListView项目时,我会将它们分类。一个部分中的每个项目都有一行作为与下一个项目的分隔符。对于最后一项,我不想绘制此分隔符。如何确定当前正在绘制的项目是否是该部分中的最后一项(而不是ListView!)?

0 投票
0 回答
106 浏览

qt - QAbstractItemMode , 如何从抽象数据方法中获取 QList<*> 变量

我有一个包含 first 、 last 和 sub(QList) 的类。例子:

在此代码块中添加 QList 子列表后,我无法构建应用程序:

错误是: C:\Qt\5.6\mingw49_32\include\QtCore\qglobal.h:725: 错误:静态断言失败:类型未注册,请使用 Q_DECLARE_METATYPE 宏让 Qt 的元对象系统知道它#define Q_STATIC_ASSERT_X(条件,消息)静态断言(布尔(条件),消息)^

0 投票
0 回答
223 浏览

qt - qabstractitemmodel 如何将子列表引用到模型

嗨,我有一个 qabstractitemmodel 的虚拟数据方法,例如:

我可以将 firstName 引用到 listview。没关系。但是我想使用像 sublist[0].member 这样的列表类型。我不能将它引用到 listview。

编辑 我添加了子列表类:`class SubObject :public QObject { Q_OBJECT public: SubObject(const QString &lesson,QObject *parent = 0): QObject(parent), course(lesson) {}

0 投票
1 回答
86 浏览

qt - 在列表中添加行

我有一个名为List的类来打印一个列表

公开

受保护

私人

另一个班级经理

公开

私人

现在我正在尝试将manager.cpp中的addrows添加为

我的意图是在manager.cpp文件中实现getlist

0 投票
1 回答
603 浏览

qt - Qt/QML 如何返回 QList从 QAbstractListModel 中收集虚拟数据方法

我想总结一下要做什么。我有一个DataObject有成员的班级:

我已经习惯QAbstractListModel了。我可以先和最后参考 listview 但我不能参考 like m_sublist[0].lesson。它给了我这样的错误:

无法读取未定义的属性“课程”。

我的代码: dataobject.h

简单列表模型.h

简单列表模型.cpp

主文件

myuiscript.qml

我找不到任何解决方案。虚拟数据模型返回单一类型的对象。FirsName是一个字符串。我不能像firstName(rolename). 也LastName被称为lastName(rolename). 但我不能subList(roleNames)sublist[0].lesson.

我的目标很简单。我想(int,QString ....)通过使用角色名将单一类型引用到委托中的文本。我不能将集合引用type(QList<SubObject*>)到委托中的文本,使用rolename(subList[0].lesson). 如何实现它们?

0 投票
1 回答
5785 浏览

c++ - C++/QML:ListView 未根据来自 QAbstractListModel 的 dataChanged 信号进行更新

我正在尝试为大型动态 C/Fortran 模拟编写 QML Gui。我要显示的数据存储在 Fortran Common 块中,并按固定时间步长更新。我的问题是,尽管 Gui 接收到信号(测试在下面的代码中),但在每个时间步后发出 dataChanged 信号时,QML ListView 不会刷新。

我可能错过了一些非常明显的东西,因为当我再次向下和向上轻拂我的 ListView 时,显示的数据会更新并正确(我猜是因为 QML 引擎在元素“看不见”并重新进入时重新渲染元素) . 因此,唯一不起作用的是 ListView 每次收到 dataChanged 信号时都会更新,而不仅仅是在重新渲染时更新。下面是我的方法和相关代码部分的更详细描述。

每个模拟实体都有几个属性(alive、position...),所以我决定为每个实体创建一个包含 DataObject 的 ListModel。这是对应的头文件(实际的仿真数据在“interface.h”中声明为extern structs,所以我可以通过指针访问它):

“acdata.h”

与标头一样,.cpp 文件也改编自您可以在此处的 Qt5 Cadaques Book 中找到的内容,除了我的构造函数遍历所有模拟实体以设置指针。此外,还有一个 do_update 函数为整个列表发出 dataChanged 信号。

“acdata.cpp”

模拟运行时,每秒调用一次 do_update()。我用 ListView 创建了一个测试 Gui,并将我的模型暴露给它:

摘自“threadcontrol.cpp”

(此代码是控制不同线程的较大文件的一部分。我很确定其余部分与实际问题无关,而且这个问题真的很长......)

所以最后有main.qml。它包含一个包含 MAX_ENTITIES 元素的列表,每个元素都包含文本字段以显示我的数据。我还添加了一个 Connections 元素来检查 Gui 是否接收到 dataChanged 信号。

“main.qml”

运行模拟时,每秒打印一次“DataChanged received”消息。

编辑:我在这里连接到 ListModel 而不是 ListView,尽管 ListView 必须接收 dataChanged 信号。由于连接到 listviewer 时控制台日志不起作用,我可能错过了 listView 和 dataChanged 信号之间的连接。但是,我认为这应该在实现 dataChanged 信号时自动工作?

附加信息:我在这里发现了与 Qt Map 类似的问题,它实际上似乎是 Qt 5.6 中修复的错误。但是,使用 Qt 5.7 运行 qmake 并没有解决我的问题。