问题标签 [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.
qt - QSGGeometry:每帧上传大量顶点是否很快?
我正在使用 Qt Quick 2 开发一个实时日志绘图仪。它每毫秒接收一次日志数据,我想使用自定义 QQuickItem 以增量方式(到参数曲线)绘制它。
目前我正计划使用 QSGGeometry 并将顶点数据发送到 GPU。但是,由于 QSGGeometry 不支持增量顶点上传,我将不得不每帧发送所有顶点。由于日志大约有一百秒长,我将每帧发送数十万个顶点。每六十秒做一次我觉得自己很傻。
当然,我可以修剪不必要的顶点(那些离其他顶点太近的顶点)并使顶点缓冲区大小可能为 1/30,但我注意到这只是将 GPU 任务带入 CPU。(或者我可以只取 30 个数据中的每一个并发送,但用户可以放大图表,它会很难看。)
相反,我可以使用 QQuickPaintedItem 并在 FrameBufferObject 上逐步绘制,但是当用户拖动图形并且图形重绘时,它将在一帧中发送十万个 gl-calls(或者在 CPU 中执行,但无论如何它会很慢)。
哪一个是更快的方法?还是有更好的方法来做到这一点?
编辑:我想我找到了一个更好的解决方案。我可以递归地拆分数据并自适应地添加点,直到它变得足够平滑。这样我就可以将数据减少到大约 500 个点,这足够便宜,可以每帧发送到 GPU,同时只访问 CPU 中需要的点。唯一的问题是 g++ 是否可以优化递归调用以降低开销。
qt - 如何在qml中沿特定路径剪辑图像
我有一个背景凹槽图像
为此我必须使用进度填充图像产生进度条效果
如何沿进度条凹槽的路径剪切进度填充图像(背景凹槽图像)。目前我正在尝试进行横向剪裁,但这不是我想要的。如我的代码的路径插值器中所述,剪切应该垂直于路径。代码中“RPM_BG.png”是背景凹槽图像,其形状与“RPM_Fill.png”(进度填充图像)相似。
请为我建议一种方法,以便我可以垂直于进度路径剪辑进度填充图像。
qt - Qt:如何将 2 个 QQuickItems 合并为一个,然后将其保存为 png
从关于 StackOverflow 的讨论中,我能够将 QML 项目中的图像保存为png/jpeg
.
如何叠加或合并两个不同的qml
图层并将它们合并为一个,以将其保存到 png/jpeg 中?
注意:我可以保存一个QQuickItem
. 只需要知道如何覆盖 2 QQuickItem
s
qt - 如何在运行时在 C++ 中创建一个虚拟 QQuickItem
我正在使用Qt 5.7
& 单元测试,使用gtest
或称为googletests。
我有一个功能来测试哪个摄入量QQuickItem
。为了测试这一点,我想QQuickItem
在我的单元测试运行时创建一个运行。是否可以?
请注意,我确实有权访问QQmlApplicationEngine
或任何 qml 文件,例如main.qml
. 但是我应该能够dummy.qml
在我的测试项目的资源中创建一个?
我还认为做 a#include <QQmlApplicationEngine>
应该让我访问QQmlApplicationEngine
?
如何在单元测试中创建具有一些有效宽度和高度QQuickItem
的 C++ 代码中的虚拟对象,并在运行时将其传递给我的方法?
c++ - 如何访问“QQuickItem”派生类中的“QQmlApplicationEngine”对象?
engine
以下 a 的典型main
函数中的变量QtApp
是 的有效实例QQmlApplicationEngine
。
是否可以访问派生类QQmlApplicationEngine
的函数内部的对象?QQuickItem
如果是,如何?
请注意,TestItem
注册在qml
侧面并显示在主窗口上。我知道我可以通过QQmlApplicationEngine
frommain
方法。但是,我有一种预感,因为 myTestItem
是窗口的一部分并拥有上下文。应该有一种方法可以获取对象或指针QQmlApplicationEngine
而不必从main
方法传递?
目标:使用QQmlApplicationEngine
I 可以访问QQuickItem
my中main.qml
的 s :
所以为了做到这一点,我想要QQmlApplicationEngine
. 如果有一种方法可以从一个内部访问其他QQuickItem
s,那么请提出建议。
c++ - Qt:只能从 GUI 线程或 QQuickItem::updatePaintNode 安排更新
如何从工作线程调用update()
而不QQuickItem
引起以下警告?
我要强制QQuickItem::updatePaintNode()
执行。
QObject::connect
我尝试了将工作线程中的 a挂接到调用MyQQuickItem->update()
. 一切正常。QQuickItem::updatePaintNode()
在信号发出后调用,并以我想要的方式QQuickItem
更新。但是我在安排的每个更新调用中都会收到此警告,我理解这是因为您无法从工作线程更新 UI。但是在 Qt 中没有警告的情况下这样做的方法是什么?
但是,我怎样才能摆脱每次更新调用时收到的警告?
注意:我必须QObject::connect
使用 a 来制作 a ,Qt::DirectConnection
因为 aQt::QueuedConnection
不能通过信号调用 update 。
通过这里的讨论进行了检查。此链接中的讨论以抱怨我来到这里的相同警告结束。我的问题是我应该纠正什么以避免该警告?
c++ - 如何更新仅在 C++ 级别创建的 QQuickItem
我有一个QQuickItem
如下所示的派生类
我也有自己的TextureNode
课。
我已经MyQQuickItem
在 QML 端注册并嵌入main.qml
如下。
在某个信号的触发上,我已经连接到一个插槽MyQQuickItem
,我调用this->update()
. 这当然会触发updatePaintNode
,我可以MyQQuickItem
用我想要的新内容重新绘制我的内容。
是否可以触发updatePaintNode
aQQuickItem
而无需在 qml 文件中声明它?
我想MyQQuickItem
在 C++ 级别动态创建我的,并且根本没有在main.qml
我如何做到这一点中定义或声明它?
核心问题:如何在 C++ 级别创建一个 QQuickItem,它可以通过调用 update 来更新新内容,以便触发 updatePaintNode?
更新:
我可以通过QQuickItem
以下方式创建一个。
但问题是updatePaintNode
我打电话时无法开火this->update
。我应该怎么做才能让我QQuickItem
自己更新?
qt - 如何从库中加载自定义 QQuickItem,以便它像应用程序中的其他 QQuickItems 一样注册和更新
我有一个MyQuickItem
派生自QQuickItem
以下的类
以下是MyQuickItem.qml
.
需要注意的是,以上所有 C++ 和 qml 代码都在一个单独的静态库中。图书馆里有qrc
一个MyQuickItem.qml
。这个库也可以访问QQmlApplicationEngine
应用程序的全局对象。
我的问题:如何从我的库中加载,以便它像应用程序中的其他 sMyQuickItem
一样在 QML 中注册?QQuickItem
main.qml
在应用程序加载 main.qml 之后调用的 C++ 方法中,我正在我的库中尝试以下方式:
首先,我不知道如何链接QUrl(QStringLiteral("qrc:/qml/MyQuickItem.qml"))
到myItem
指针。
其次,执行上述操作似乎无法MyQuickItem
正确加载,因为我没有接到updatePaintNode
我已覆盖的呼叫。我需要Qt/QML
窗口系统来调用我MyQuickItem::updatePaintNode
的,因为我在那里有重要的逻辑。
那么,我怎样才能MyQuickItem
从我的库中正确加载,以便它像其他QQuickItem
s 一样注册和更新?
qt - 如何将动态创建的 QQuickitem 添加到我的应用程序的 main.qml 或 QML 项目列表
我需要动态创建一个QQuickitem
& 添加到我的main.qml
.
尝试这样做,我QQuickitem
通过以下方式创建一个。
我可以访问QQmlApplicationEngine
in main.cpp
。
问题:如何添加dynamic_quick_item
到我的项目main.qml
?我想从 C++ 端动态添加dynamic_quick_item
到我的项目列表中。main.qml
它不需要添加到main.qml
. 只想将 a 添加QQuickItem
到 mymain.qml
中定义的 QML 项目列表中,这与main.qml
. 有没有可能的方法来实现这一点?
更新:执行以下操作应该获得QQuickItem
我添加的有效实例。但它没有
我得到my_dynamic_quickitem
null 这意味着我创建的 QQuickItem 从未被添加
qt - 如何从 C++ 中检索 QML 属性的值?
我QQuickItem
在main.qml
.
我在C++ 端my_quick
通过以下方式获取对象。
如何quickProperty
使用 C++ 端获取 set 的当前值my_quick_ptr
?