问题标签 [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 投票
2 回答
4299 浏览

c++ - 从 QAbstractListModel 中删除项目后 QML 崩溃

我在装有 OS-X 10.8.5 的 Mac 上运行 Qt 5.1.1 和 QtCreator 2.8.1。我有一个管理 ImageData 对象的 QAbstractListModel。在 main.cpp 中注册 ImageProvider 后,我可以使用 GridView 加载图像并在 QML 中很好地显示它们。

接下来我在视图中选择单个图像,例如,下面显示了几个带有橙色边框的选定图像:

在此处输入图像描述

然后 C++ 模型函数:deleteSelected(),产生预期的结果:

在此处输入图像描述

但是,当我尝试调整窗口大小时,比如抓住一个角落,我会崩溃。堆栈跟踪显示:异常类型:EXC_CRASH (SIGABRT),我收到 Qt 错误:

因此,也许我不正确地删除了模型项或未能通知模型更改,但我认为开始和结束 RemoveRows 发出了正确的信号来处理同步?毫无疑问,我在这方面遗漏了其他东西。

我还调用了 begin 和 end ResetModel,它可以防止应用程序在调整大小后崩溃,但在这种情况下,附加到模型的任何其他视图都会恢复为显示所有原始项目。

我已经为此寻找解决方案,尝试了很多代码实验,并研究了此处此处此处以及其他几个地方发布的代码。

似乎无法使其正常工作,有什么建议吗?谢谢!

下面是一些相关代码:


主.cpp:

数据模型控制器.h:

数据模型控制器.cpp

图像数据.h:

main.qml:

图像数据.cpp:


编辑:在 userr1728854 下面关于范围检查的评论之后,我编辑了 DataModelController::data() 的第一部分,以检查这是否是问题所在。

我的代码现在看起来像(它比修改原始代码更容易在下面引用,而且我不想通过更改我发布的内容来改变我的问题的上下文):

因此,即使这不是向 data() 方法添加范围检查的最可靠方法,该行:

cout << "模型索引 = " << index.row() << endl;

当我调整窗口大小时,至少应该打印:“ index.row() ”,但事实并非如此。因此,调整窗口大小似乎无法访问 data() 方法,并且程序仍然崩溃。

0 投票
2 回答
2205 浏览

pyqt - 在 QListView 中以相同的缩略图大小保持纵横比显示图像

所以我想出了如何在 QListView 中显示图像:这是我的做法

但现在我需要如何让所有图像显示相同的缩略图大小并且文件名不应该移动它们,而是文件名应该换行到下一行!我应该如何做到这一点。

0 投票
3 回答
8921 浏览

python - Qt:QAbstractItemModel 中的 setData 方法

我是模型视图的新手,我在查看文档的同时一直在关注本教程,我偶然发现了这个小细节:可以在此处下载的教程代码在 QAbstractItemModel 类(此处为 QAbstractListModel)中setData 方法的代码是:

根据教程中的解释以及我从文档中了解的内容,如果函数返回 True,则更新视图,如果返回 false,则没有任何反应,但是当我将代码更改为:

我意识到即使函数返回 False,如果 color.isValid() 视图仍然会更新。我误解了 setData 方法中的返回角色还是一个错误?

作为参考,我使用的是 PySide 1.2.1,而不是 PyQt4。

0 投票
0 回答
883 浏览

qt - 不能将 QAbstractListModel 对象作为一个类的属性

我的代码如下所示:

而 PeopleListModel 是 QAbstractListModel 的子类。

但是我得到了编译错误:

0 投票
1 回答
1863 浏览

c++ - 将 QML 中对象的 QAbstractListModel 派生列表模型成员绑定为 Q_PROPERTY

我想出了如何在 QML 中公开和绑定 QAbstractListModel 派生列表模型的实例。

但我真正想做的是向 QML 公开一个对象并将一个 QAbstractListModel 派生列表模型的成员绑定为 Q_PROPERTY。

我试过这样:

但我得到一个编译错误:

E:\Qt\Qt5\5.1.1\mingw48_32\include\QtCore\qglobal.h:946: 错误:'QAbstractListModel& QAbstractListModel::operator=(const QAbstractListModel&)' 是私有类 &operator=(const Class &) Q_DECL_EQ_DELETE; ^

正确的方法是如何做到这一点?

0 投票
1 回答
1868 浏览

qt - 基类 'QAbstractListModel' 具有私有复制构造函数

我有一个 QT QML 项目。(仍然很小)

我首先在我的UScenario模型上绑定一个列表视图,通过子类化QAbstractListModel,它工作得很好。

现在,每个UScenario都有一个列表UTask,其中也有一个列表UCondition(所以,Utask还有子类QAbstractListModel)。但是,QT Creator 给了我一个错误:

所以我不确定我的问题在哪里。我尝试阅读有关QAbstractListModelvs的文档QAbstractItemModel,但我不知道。

我还试图看看我是否曾经UTask以错误的方式构建过;我想不是。

0 投票
2 回答
7911 浏览

python - PyQT 列表视图没有响应 datachanged 信号

我一直在关注一些教程并尝试设置列表模型。我的主窗口有两个访问同一模型的列表视图。当我更新一个列表中的项目时,另一个列表在获得焦点之前不会自行更新(我单击它)。所以看起来 dataChanged 信号没有被发出,但我无法弄清楚我的代码与我所基于的任何示例有何不同。

主文件

模型.py

谁能看到这里有什么问题?仅供参考,我使用的是 PyQT5.2.1 和 Python 3.3。

0 投票
1 回答
1038 浏览

python - 无法将 QAbstractListModel 传递给 QML

我正在使用 PyQt5 尽可能接近这个 PySide 教程。当我运行我的代码时,我收到了这个错误:ReferenceError: pythonListModel is not defined,并且列表显示为黑色,没有项目。

这是我的代码

我的模型和包装

和我的 QML

为什么 Qt 找不到我的 contextProperty?

0 投票
1 回答
1338 浏览

qml - 模型内部的 QML 模型未定义

我有一个代表 s 列表的QAbstractListModel调用。每个人都有一个财产。模型的作用很简单,即一个实例。SerialPortListSerialPortSerialPortQList<int> supportedBaudRatesSerialPortListdisplayQVariant::fromValue(mSerialPorts[i])SerialPort

我以这样的方式显示我的列表模型Repeater(高度简化):

也就是说,一个串行端口名称列表,然后是一个带有支持的波特率的组合框。

奇怪的是,虽然文本显示得很好,但显然组合框model.display是未定义的。如果我用这个替换组合框:

然后它会产生您期望的结果!

这里发生了什么?我只能假设它model在内部被重新定义,ComboBox所以它认为它指的是它自己,但我已经尝试了各种portList.model.display.supportedBaudRates我能想到的 id 引用,但它们都不起作用。

编辑

卡卡杜指出,不能用 aQList<int>作为模型。有点烦人,但我已经把它改成了QStringList你显然可以使用的。可悲的是,错误仍然相同。

编辑 2

我更改了model:toComboBoxmodel: { console.log("model: " + model); }打印了1,这让我确信它model指的是它自己。

0 投票
3 回答
3044 浏览

qt - 在不使用 ListView 的情况下访问 Qml 中的 QAbstractListModel 项

我已经将 QAbstractListModel 子类化,以便在 qml 端有一个模型。我可以在 ListViews 和其他处理模型的类似组件中轻松使用此模型,但是,我无法直接访问它。这就是我没有成功的尝试:

这可能吗?我使用了错误的语法吗?