Qt QSGNode可以继承QObject吗?

Qt QSGNode可以继承QObject吗?,qt,scenegraph,Qt,Scenegraph,QSGNode能否继承QObject并连接到信号和插槽?我已经尝试过了,但是只有在渲染完成时才会调用插槽 我有一个细胞矩阵。我使用QML将它们显示在一个二维ListView上(每个代理中的ListView都有一个ListView)。这缺少性能,所以我改为SceneGraph。问题在于数据模型。我现在正在传递一个QList,其中列有一个QList。每行都有单元格,每个单元格都有信号。这种细胞会发生变化。我想通知这些信号的渲染更新。在找到更好的解决方案之前,我的解决方案是让每个单元格在相应的列上触发

QSGNode能否继承QObject并连接到信号和插槽?我已经尝试过了,但是只有在渲染完成时才会调用插槽


我有一个细胞矩阵。我使用QML将它们显示在一个二维ListView上(每个代理中的ListView都有一个ListView)。这缺少性能,所以我改为SceneGraph。问题在于数据模型。我现在正在传递一个QList,其中列有一个QList。每行都有单元格,每个单元格都有信号。这种细胞会发生变化。我想通知这些信号的渲染更新。在找到更好的解决方案之前,我的解决方案是让每个单元格在相应的列上触发一个已更改的信号,该信号将在实现场景的主QQuickItem上打开更新标志


Ideas?

A
QSGNode
无法本地支持
信号
s和
插槽
s。但是如果你想,你可以做双重继承

#include <QObject>
#include <QSGNode>

class Foo : public QObject, public QSGNode    {
     Q_OBJECT
     // Your additional implementation here
};
#包括
#包括
Foo类:公共QObject、公共QSGNode{
Q_对象
//您在这里的附加实现
};

您应该将模型中的信号连接到处理QSGNode的QQuickItem,而不是直接连接到QSGNode。QSGNode对象应该只在QSGRenderingThread内部处理

QObject仅在一个线程中“活动”。这是他们发射和接收信号的线程。通过使QSGNode成为QObject,您必须注意发送和接收线程,否则您将出现与您描述的症状类似的症状。除非在建立连接时指定
Qt::DirectConnection
,否则,如果信号从一个线程发出并从另一个线程中的对象接收,则该信号将转换为消息,并将在以后使用
QEventLoop
进行调度

一个好的做法是采用类似于Qt示例中提供的结构:


QQuickItem处理信号连接并存储属性。根据更改的内容,QQuickItem向QSGNode发送命令以重新计算其几何体的某些部分。这只能通过
QQuickItem::updatePaintNode()

完成,您想做什么?在QSGNode上附加信号和插槽似乎有点奇怪。我有一个细胞矩阵。我使用QML将它们显示在一个二维ListView上(每个代理中的ListView都有一个ListView)。这缺少性能,所以我改为SceneGraph。问题在于数据模型。我现在正在传递一个QList,其中列有一个QList。每行都有单元格,每个单元格都有信号。这种细胞会发生变化。我想通知这些信号的渲染更新。在找到更好的解决方案之前,我的解决方案是让每个单元格在相应的列上触发一个已更改的信号,该信号将在实现场景的主QQuickItem上打开更新标志。想法?@NunoSantos我想你应该在你的问题上加上这个评论。我已经这么做了。碰巧信号/插槽仅在下一个渲染帧上触发。想象一下,你必须调整窗口的大小才能发射信号/插槽。@NunoSantos,我想这应该是你问题的一部分。你能列出场景重设的所有原因吗?(例如,窗口大小调整可能是一个原因。)如果可以列举所有这些原因,则似乎希望对列举的原因发出
信号,而不是从
QSGNode
发出
信号,
QObject
应始终是要继承的第一个类。(来自Qt文档)