列表视图最初不显示数据
ListView not initially showing data
我的QMLListView
不会显示我的数据,直到我用鼠标扰动它(例如,上下拖动它)。 在此之后,视图显示模型没有问题,直到它清空,然后我再次需要扰动它以使其再次工作。 有没有办法让这个ListView
开始工作?
我在Linux 14.04上使用Qt 5.8。 我的模型是QAbstractListModel
的子类。 我按照 AbstractItemModel 示例构建它。 主要区别在于我的列表模型是实体的属性,而不是在main.cpp
中使用setContextProperty
设置。
SO上有一些关于ListView
不更新的类似问题,但似乎没有一个问题只是在开始时的问题。 它们中的大多数都与手动调用 OPdataChanged
有关,而不是beforeInsertRows()
&endInsertRows()
- 这两种方法我都在调用(见下文)。
我的ListView
在装有SceneLoader
的物品中。
我在这里发布了所有相关代码,因为我有点怀疑如何在ListView
上使用布局(也许这是导致它的原因? 也许我的层次结构被打破了? 不过我无法证明这一点。
总之,
列表视图:
ListView {
anchors.fill: parent
model: sceneGraph.blobs
delegate: delegate
}
BlobModel.cpp:
auto BlobModel::addBlob(const BlobPointDataPtr& data) -> void
{
// ...
// Each blob has a uuid
const auto idx = Contains(uuid);
if (-1 != idx)
{
blobs_[idx]->Update(data);
Q_EMIT dataChanged(createIndex(idx, 0), createIndex(idx, 0));
}
else
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
blobs_ << new Blob{data, id_count_}; id_count_++;
endInsertRows(); // responsible for the QQmlChangeSet
Q_EMIT dataChanged(createIndex(rowCount(), 0), createIndex(rowCount(), 0));
}
}
另外,在我的终端上,我收到消息:
QObject::connect: Cannot queue arguments of type 'QQmlChangeSet'
(Make sure 'QQmlChangeSet' is registered using qRegisterMetaType().)
这似乎是endInsertRows()
发出的,但我不确定为什么。 过去的解决方案是注册缺少的类型,例如qRegisterMetaType<QQmlChangeSet*>("QQmlChangeSet");
但这似乎不是Qt的公共类型,而且由于一切都在没有它的情况下大部分工作,我不确定缺少这是确切的问题。
正如评论中指出的那样,问题在于我在主线程之外修改了我的模型。
我的代码被设置为另一个线程将通过直接调用addData
触发对我的模型的添加。 我的最小示例无法复制它的原因是,在其中我使用了QTimer
来模拟另一个线程,但是QTimer
线程也在主线程上运行。
解决方案是将我对addData(data)
的直接调用更改为发出信号来执行添加,从而将实际工作移回主线程。
- 访问和打印元组中的数据,并使用 C++14 使用模板函数显示数据
- 它不显示数据,只显示永无止境的循环
- 在网格视图中显示数据 - 基于 MFC c++ 对话框的应用程序
- 使用 insertion(<<) 运算符和 "write" 函数在 C++ 中显示数据有什么区别?
- 使用 ARDUINO 和处理在 8x8 LED 矩阵上显示数据时出现问题
- 列表视图最初不显示数据
- C++服务器未显示数据包
- 模板堆栈类:堆栈中没有显示数据
- 使用选择排序对名称进行排序并显示数据
- 'top'程序用于在屏幕上重新显示数据的技术是什么?
- 以两列c++显示数据
- QTableView 显示列标题,但不显示数据
- 显示功能不显示数据
- 从变体VT_ARRAY读取和显示数据 |VT_BSTR
- 线程不刷新数据,在屏幕中显示数据时出错
- 使用C++与3000Hz的线阵扫描相机接口,并处理/显示数据
- QtableWidget不显示数据
- 不按我的要求显示数据输入表单
- 无法在 MySql 数据库中的 C++ QTableView 中显示数据 QSqlQueryModel
- 使用SDI应用程序(MFC)从文本文件读取数据并显示数据