问题标签 [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.
python - PyQt5 和 QAbstractListModel::columnCount
QTreeView 忽略从 QAbstractListModel 继承的类的 columnCount() 并且只显示第一列:
相关的 C++ 代码工作正常。
我究竟做错了什么?
qt - 如果模型更改,ListView 是否会重绘底层模型?
问题基本上是标题,但更详细:
我已经对 进行了子类化QAbstractListModel
,我们来命名它myModel
。我正在myModel
用 c++ 代码创建内容,然后将其输入到ListView
QML 中。我的代码myModel
在 C++ 代码中进行了修改,我可以立即在我的 中看到修改ListView
,这很好。我的问题是,ListView
当底层模型更改(如添加项目)或仅绘制新项目时,是否会重绘所有元素?
qml - 如何将自定义对象定义为 QAbstractListModel 中的角色?
我的问题是,如何将自定义对象指定为派生模型中的角色,QAbstractListModel
以便在将其可视化时ListView
可以访问其成员变量。这里有一个例子是一些简单的代码示例:
这是代表我的自定义对象的类:
这就是我派生的被覆盖data()
函数现在的样子(但它不起作用):MyModel
QAbsractListModel
在这里,我指定了角色名称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()
,我还MyCustomObject
从public QObject
. 我在头文件Q_DECLARE_METATYPE
的底部添加了。MyCustomObject
在MyCustomObject
我调用的构造函数中qRegisterMetaType<MyCustomObject>("MyCustomObject")
,在我main
注册的类中也像这样qmlRegisterType<MyCustomObject>("com.test.mycustomobject", 1, 0, "MyCustomObject")
这是MyCustomObject
现在类的样子:
这就是我派生的被覆盖data()
函数现在的样子:MyModel
QAbsractListModel
我最初发布的所有其他功能都是相同的。
qt - 如何在基于 QMap 的 QAbstractListModel 中找到特定行的索引?
QAbstractListModel
我有一个基于QMap<QUuid, CustomObject>
我ListView
在 qml 中可视化的类的派生类。在我的应用程序运行期间的某个时间,我会根据它的QUuid
. 当我进行删除时,我想调用它,beginRemoveRows
以便ListView
通知它的内容正在更改并且需要重新绘制自身。如何找到正确的索引beginRemoveRows
?
qt - 如何确定当前项目是否是 ListView 部分中的最后一项
因此,当我绘制我的ListView
项目时,我会将它们分类。一个部分中的每个项目都有一行作为与下一个项目的分隔符。对于最后一项,我不想绘制此分隔符。如何确定当前正在绘制的项目是否是该部分中的最后一项(而不是ListView
!)?
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(条件,消息)静态断言(布尔(条件),消息)^
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) {}
qt - 在列表中添加行
我有一个名为List的类来打印一个列表
公开:
受保护:
私人:
另一个班级经理为
公开:
私人:
现在我正在尝试将manager.cpp中的addrows添加为
我的意图是在manager.cpp文件中实现getlist
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)
. 如何实现它们?
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 并没有解决我的问题。