问题标签 [qquickitem]
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++ - 来自 C++ 的 QQuickItem 实例化和设置难题(不允许将任何内容传递给构造函数)
我发现自己在尝试从 C++ 动态实例化自定义 QML 元素。
所以,要布局问题:
Node
我有一个从任何 UI 中抽象出来的轻量级对象数据结构。- 由于内存繁重
QObject
且派生,我必须按需实例化 UI 元素。 - 每个
Node
人都有一个_ui*
成员,每个UI
人都有一个_node*
成员。 - 每个
Node
都有一个独特的_id
,每个UI
有一个ID
PROPERTY
,交付自_node*
。ID 属性是只读的,因为 ID 是在Node
实例化时设置的,不应修改。 - QML 元素必须只有带有默认参数的构造函数,例如不能向构造函数传递任何东西。
- 当 QML 元素创建时,
_node*
成员是,因此任何试图访问 ID 属性的NULL
QML 子元素都不能,因为实例化时没有设置,只能通过 aux 方法设置,但由于该属性实际上是一个只读常量,实例化后,当实际设置的成员时不再更新。UI
_node*
_node*
UI
所以基本上,我需要能够在创建时将链接设置Node
为每个对应的链接UI
,以便UI
QML 元素可以访问它,但我不能将它传递给构造函数,并且由于属性是只读的,因此它被读取只有一次,在UI
实例化时,当_node*
UI
成员仍然是时NULL
,因此无法访问 ID 值。
想到的一个快速而肮脏的解决方案是NOTIFY
idChanged()
在设置成员后实例化时添加一个要发出的信号,_node*
即使 ID 属性从未真正改变,不能也不应该,并添加对 ID getter 的检查 - 返回一个假虚拟如果_node*
是任意值,否则从成员中NULL
获取 ID 值。_node*
不用说,这并不优雅,并且增加了一些开销,并且虚拟 ID 值是潜在的蠕虫罐头,因此欢迎任何关于如何击败 QML 内部不良设计的想法。
qt - QQuickItem::mapToItem 返回类型是什么?
下面的应用程序输出从一个映射QQuickItem
到另一个的坐标。根据文档:
object mapToItem(Item item, real x, real y)
将位于此项的坐标系中的点 (x, y) 或 rect (x, y, width, height) 映射到项的坐标系,并返回一个 x 和 y(以及可选的宽度和高度)属性匹配的对象映射的坐标。
我希望输出是这样的:
0 0
1 1
2 2
但我得到:
为什么是mapped.x
a的类型QPointF
?我希望它是一个浮点值。什么是实际mapped
类型?
UPDATE1: QQuickItem有mapToItem
2 个 args,而Item有mapToItem
3 个 args。上面的代码中调用了哪一个?
c++ - 从 C++ 插件调用 QML 中的 JS 函数
假设我有简单的 QML 插件。我定期检查对象的某些状态,在这一步中,我想从 c++ 中查询 QML 对象,方式如下:
插件代码 (c++)
QML 文件:
我不能仅仅因为对 JS 的调用必须以同步方式使用信号。我的意思是我需要的是:
- 在 C++ 代码计时器调用函数 timerFunction() 与对象验证
- 在 timerFunction() 中我调用 JS 函数并返回结果
- 之后我继续执行 timerFunction()
所以我的问题 - 有没有办法从 C++ 插件对象调用 JS 函数?
qt - 试图更好地理解 Item 的用法?
我正在阅读关于 QML 的教程,在使用Rectangle
教程的第一部分之后,他们已经开始使用 Item 作为他们创建的每个组件的基础。
问题是,color
它似乎不是 Item 的有效属性。我不明白为什么。
然后,我从各个地方在线查看了一堆示例组件定义,它们似乎都Item
用作顶级类,然后紧随其后,Rectangle
. 包装 a Rectangle
in 有什么意义Item
?为什么不直接Rectangle
用作顶级类呢?
c++ - 在 QML 上异步更新多个 QQuickPaintedItem
我正在尝试使用从 QQuickPaintedItem 继承的类来显示使用 openCV 捕获的视频帧。
在这个类中,有一个名为 queryFrame() 的槽,它通过以下方式连接到 QTimer timout (40ms):
查询帧()代码:
每次调用 queryFrame() 时,它都应该更新视图。它正在这样做,但它不是异步工作的。
我应该如何让每个 CVCamScreen 以独立的方式更新自己?
呈现 CamScreens 的 QML 代码:
c++ - 如何将用于计算的 C++ 结构暴露给 Qml
我有以下问题。
我正在开发一个 C++ 模型和一个 Qml 视图,通过控制器连接它们。在我的模型中,我执行多个计算。我还为我的应用程序的用户提供了编写自定义事件处理程序的可能性,用 qml 编写。现在我遇到了一个点,我决定使用定点表示法,并且我编写了一个相应的 C++ 类。现在我想向决定在 Qml 中扩展我的应用程序的开发人员提供 FixedPoint 类 - 包括它的所有运算符。到目前为止,我以 QProperties 的形式提供了所有数据,这是编码指南所要求的。但我愿意在我的团队中讨论其他解决方案。显然,一个固定点是没有身份的,算法依赖于复制它的可能性,这在从 QObject 继承时是不允许的。
所以问题来了:我怎样才能将一个 c++ 类/结构暴露给 QML,这不是一个身份?
代码中的一个例子:
我想在 Qml 中使用它作为用 C++ 编写的 QQuickItem 的属性(值):
然后,属性值在 javascript 中的整个计算中使用,并在整个过程中被复制多次。因此,我认为我不能将 value 设为 FixedPoint* 类型的属性。我对吗?
c++ - 在 QQuickItem 中绘制多个不同颜色的点
我想在自定义中渲染一个有很多点(> 1.000.000)和不同颜色的图QQuickItem
。
后来我想对这些点进行动画处理(在坐标和颜色之间渐变),所以我认为这QQuickPaintedItem
还不够快,我必须使用.updatePaintNode
QQuickItem
问题是为每个点设置颜色。我必须为每个点 a 创建QSGGeometryNode
并添加 Geometry 和 ColorMaterial 吗?还是有更快的解决方案?
此致
c++ - 在 QQuickPaintedItem 中变换坐标
我想创建一个插件,该插件源自QQuickPaintedItem
用户可以平移和缩放绘制的图像的位置。
对于缩放,我使用的是方法setContentsScale
。现在我想变换绘制图像的锚点,以便平移。有解决办法吗?
问候
c++ - 识别 QQuickPaintedItem 中的手势
我想为我创建一些手势QQuickPaintedItem
在普通的 QWidgets 中我们有方法gestureEvent(QGestureEvent *event)
(看这里)
但是如何在 QQuickItem 中获取这些事件?
opengl - QQuickItem 上的 Qt 矩形未正确呈现
我在使用 QQuickItem 的 QT5 中有一个痛苦的问题。我必须在 QML 中使用纯 openGL 绘制 3D 模型,所以我创建了自己的自定义 QQuickItem。到目前为止,一切都按预期工作:3D 模型在 QML 中精美地显示。
当我想在自定义 QQuickItem 旁边的同一个 QML 中放置一个简单的矩形时,就会出现问题。不再显示 3D 模型。这是为什么?
这是我的自定义快速项目代码:
这是我的 QML,在 3D 模型上有一个小矩形:
任何人都可以向我提供至少对此问题的解释或一些建议吗?