问题标签 [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.
c++ - QTreeView-cell 中的 QComboBox
我想在 QTreeView 的特定单元格中显示一个 QComboBox。我知道我必须为此使用自己的模型。整个事情已经在单元格中显示的 QIcons 上正常工作,但我没有用组合框做同样的事情。这就是我的模型的样子(一些不完整的伪代码):
当我尝试返回一个 QComboBox 时,我得到一个编译错误
MyListModel 继承自 QAbstractListModel。
知道我必须做什么才能使用 QComboBox 而不是愚蠢的图标吗?
谢谢!
c++ - QQmlListProperty - 可写 QList 违反 QML 的内存管理规则?
我一直在使用QQmlListProperty
一种“主类”,它既是模型又是 qml 列表属性,允许对象主干的简单声明性标记,它可能与运行时一样可修改,也可能不可修改从动态结构生成/合并代码。我在这个答案中分享了一些近似的东西。
我对实际的实现细节一无所知,但触发我的“蜘蛛感”的是以下文档:
QQmlListProperty::QQmlListProperty(QObject *object, QList<T *> &list)
- 我目前正在使用的状态是:
通常,此构造函数不应在生产代码中使用,因为可写 QList 违反了 QML 的内存管理规则。
我实现的原因QQmlListProperty
是我想使用 qtquick 解析器/工厂或任何能够从常规 QML 代码创建模型数据的东西。当然,API 本身缺少插入和删除方法QQmlListProperty
并不值得担心,因为预期目的不需要此类功能,即在执行过程中解析代码和创建对象,这样附加就足够了。我担心的原因是“可写 QList 违反了 QML 的内存管理规则”,因为最终结果稍后会被修改。并不是说追加也不符合写作的条件,但我仍然担心“违反 QML 的内存管理规则”可能产生的负面影响。
在一般情况下,似乎可以对通过解析 QML 文件创建的结构进行运行时更改并且没有问题,即使它具有 id,例如:
但是在某些情况下,它确实说该对象不能被动态销毁或类似的东西。
QQmlListProperty
那么,鉴于模糊的“可写 QList 违反 QML 的内存管理规则”警告,我是否可以安全地通过稍后实施和更改这些结构来从 QML 文件创建对象结构?
qml - QML 列表视图/C++ 列表模型中的大量数据
在我的项目中,我需要使用 QML 列表视图显示一些数据的列表。而且,我使用的 QT 版本是 QT 5.0.2。由于此版本的 Qt 中不提供滚动条视图,因此我设法通过遵循此示例来实现它。
现在,数据源是另一个组件,它提供了 C++ API 来请求数据范围。并且数据集中的元素数量可能很大(以数万计)。
我已按照以下步骤实现我的要求:
- 我创建了一个从 QAbstractListModel 继承的 C++ 类,并且我已经覆盖了 rowCount、data、canfetchmore 并获取更多函数。
- 在 QML 中,我将实例 C++ 称为模型。
- 每当调用 fetchmore() 函数时,我都会使用由另一个组件提供的 C++ API 请求下一组数据,并将其附加到我的列表模型中。
到目前为止,一切都很好。但我需要一些澄清 -
- 如果我继续将数据附加到我的列表模型中,那么我最终将在列表中存储数千个元素(我不想这样做)。我想限制列表中元素的数量并将其用作环形缓冲区。这可能吗?
- fetchmore 中的 QModelIndex 参数作为无效索引接收。为什么?
- 假设一个案例:滚动条上提到了字母,当用户在滚动条上选择 Y 时,我应该获取以 Y 开头的元素。在这里,我可以从外部组件中获取数据并使用新数据重置列表模型。但是,如果我这样做,那么我的列表将从 Y 元素开始,我将无法向上滚动以获取以前的元素。——有没有其他方法可以实现这一点?
- 此外,如果我询问大量数据(例如在第 3 点中提到的情况),我的其他组件需要相当长的时间 - 有什么建议可以做出更好的设计来处理这种情况吗?
- 除了 fetchmore() 之外,还有什么方法可以动态更新模型。
我在谷歌上花了很多时间来回答我的问题,但我成功地失败了。:(
任何帮助表示赞赏。提前致谢。
c++ - qml listview 在 datachanged() 信号后不更新信息
我有一个基于此示例编写的模型。此模型连接到一个listview
以显示动态数据。我已确保在datachanged()
更改源数据时发出模型的信号。列表视图不会更新 datachanged() 信号。这是我的代码:
数据模型.h:
数据模型.cpp:
主窗口.cpp:
视图.qml:
model-view-controller - QListView 中的可拖动项目
我正在尝试创建一个列表小部件,其中 uesr 可以通过在小部件中拖动元素来重新排列元素,使用PySide-1.2.2
/Qt-4.8.7
这很简单,很简单QListWidget
:
但是,我正在尝试对QListView
/做同样的事情QAbstractListModel
,虽然我可以“抓住”一个项目及其drag
周围,但我不能drop
。根据文档,设置数据模型supportedDragActions
并返回正确的flags
. 我也启用了drag
,acceptDrops
并将 设置DragDropMode
为InternalMode
,QListView
但无济于事。
我想QAbstractListModel
我需要重写一些方法来实际接收/接受 drop 事件。但是哪一个?
javascript - QML ListModel onDataChanged 问题
我正在尝试在我的 QML ListModel 上实现一个回调函数,以便在 ListModel 中的数据发生变化时执行一些操作。显然,不可能为 ListModel 中的各个用户定义属性创建 on...Changed 处理程序。所以,我正在尝试使用 ListModel 可用的 onDataChanged 处理程序。
但是,onDataChanged 似乎只引用了 ListModel 中的第一个元素。也就是说,topLeft 和 bottomRight 始终指向第一个元素,即使我在列表中向下操作一个元素也是如此。
我在这里需要的是一个可靠的处理程序,它可以在 ListModel 触发时准确地反映正确的行。
qt - Qt QAbstractModel 和属性
我正在处理我的项目,但遇到了 C++/QML 数据交互问题。我需要在视图之间进行信息交换:List->Project's details。目前我正在使用 QAbstractModel 对象作为 C++ 模型,但最近我了解到我需要在我的模型中使用属性。
例如字符串 myId,我可以使用它在视图之间交换数据。
我需要将此类变量属性字符串从 C++ 代码添加到我的模型中。有没有机会在 C++ 中添加属性字符串?
我使用了一个 StockQt 示例的想法如何制作一个“模板”页面,该页面展示了股票的信息。但我需要从 C++ 填充模型,然后将其用作项目列表的模型,并详细查看每个项目。详细来说,我有一个项目列表,例如:
- 项目A
- 项目B
- 项目 C
然后我想单击项目的名称并在不同的视图上查看该项目的详细信息。我看到我可以通过模型的属性来实现它,因为 StockQt 的示例表明它是可能的,但我不明白如何用 C++ 填充这些属性。
详细信息:我有一个主 ListView 作为主流程菜单。然后,当您单击菜单项时,您可以看到另一个 ListView,其中显示了项目列表。然后我想单击项目名称并查看详细信息页面。
请帮我解决这个问题!
qlist - 如何更新特定的 QAbstractListModel 项目?
我从 QAbstractListModel 派生了一个类 FeedItemViewModel。我已经实现了一种在列表模型中添加项目的方法,但我不知道如何更新具有特定 ID 的项目。
这是代码:
qtquick2 - 如何在 QtQuick2 中正确实现可检查的 ListView?
来自 C++ 我不知道如何在 QtQuick 中正确实现可检查的 ListView。
出于测试目的,我创建了一个小型测试应用程序。
该模型:
在运行时,我创建了一个 QListView 小部件和一个 ListView QtQuick2 项目。两者都连接到同一模型。
在小部件中选中/取消选中时,qml 视图会正确更新。在 qml 视图中选中/取消选中时,小部件视图不会改变!
我注意到我的 setData 没有被调用。
在 QtQuick2 中实现可检查 ListView 的正确方法是什么?
qt5 - 如何根据 QAbstractListModel 禁用 ListView 中的某些项目?
我有一个QAbstractListModel
C++ 模型类和一个 QtQuick2 ListView
。
出于测试目的,我还创建了一个 QtWidgetsQListView
并附加到相同的模型以进行比较。
我想告诉视图应该使用覆盖的项目禁用哪些项目QAbstractListModel::flags()
,如下例所示:
遗憾的是 QtQuick2 ListVie 完全忽略了这个标志,而 QListView 没有:
我希望 item2 和 item5 在 QtQuick2 中也被禁用。如何做到这一点?