问题标签 [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.

0 投票
0 回答
143 浏览

qt - QSGGeometry:每帧上传大量顶点是否很快?

我正在使用 Qt Quick 2 开发一个实时日志绘图仪。它每毫秒接收一次日志数据,我想使用自定义 QQuickItem 以增量方式(到参数曲线)绘制它。

目前我正计划使用 QSGGeometry 并将顶点数据发送到 GPU。但是,由于 QSGGeometry 不支持增量顶点上传,我将不得不每帧发送所有顶点。由于日志大约有一百秒长,我将每帧发送数十万个顶点。每六十秒做一次我觉得自己很傻。

当然,我可以修剪不必要的顶点(那些离其他顶点太近的顶点)并使顶点缓冲区大小可能为 1/30,但我注意到这只是将 GPU 任务带入 CPU。(或者我可以只取 30 个数据中的每一个并发送,但用户可以放大图表,它会很难看。)

相反,我可以使用 QQuickPaintedItem 并在 FrameBufferObject 上逐步绘制,但是当用户拖动图形并且图形重绘时,它将在一帧中发送十万个 gl-calls(或者在 CPU 中执行,但无论如何它会很慢)。

哪一个是更快的方法?还是有更好的方法来做到这一点?

编辑:我想我找到了一个更好的解决方案。我可以递归地拆分数据并自适应地添加点,直到它变得足够平滑。这样我就可以将数据减少到大约 500 个点,这足够便宜,可以每帧发送到 GPU,同时只访问 CPU 中需要的点。唯一的问题是 g++ 是否可以优化递归调用以降低开销。

0 投票
1 回答
1159 浏览

qt - 如何在qml中沿特定路径剪辑图像

我有一个背景凹槽图像

为此我必须使用进度填充图像产生进度条效果

如何沿进度条凹槽的路径剪切进度填充图像(背景凹槽图像)。目前我正在尝试进行横向剪裁,但这不是我想要的。如我的代码的路径插值器中所述,剪切应该垂直于路径。代码中“RPM_BG.png”是背景凹槽图像,其形状与“RPM_Fill.png”(进度填充图像)相似。

请为我建议一种方法,以便我可以垂直于进度路径剪辑进度填充图像。

0 投票
2 回答
1017 浏览

qt - Qt:如何将 2 个 QQuickItems 合并为一个,然后将其保存为 png

从关于 StackOverflow 的讨论中,我能够将 QML 项目中的图像保存为png/jpeg.

如何叠加或合并两个不同的qml图层并将它们合并为一个,以将其保存到 png/jpeg 中?

注意:我可以保存一个QQuickItem. 只需要知道如何覆盖 2 QQuickItems

0 投票
1 回答
501 浏览

qt - 如何在运行时在 C++ 中创建一个虚拟 QQuickItem

我正在使用Qt 5.7& 单元测试,使用gtest或称为googletests

我有一个功能来测试哪个摄入量QQuickItem。为了测试这一点,我QQuickItem在我的单元测试运行时创建一个运行是否可以?

请注意,我确实有权访问QQmlApplicationEngine或任何 qml 文件,例如main.qml. 但是我应该能够dummy.qml在我的测试项目的资源中创建一个?
我还认为做 a#include <QQmlApplicationEngine>应该让我访问QQmlApplicationEngine?

如何在单元测试中创建具有一些有效宽度和高度QQuickItem的 C++ 代码中的虚拟对象,并在运行时将其传递给我的方法?

0 投票
1 回答
1612 浏览

c++ - 如何访问“QQuickItem”派生类中的“QQmlApplicationEngine”对象?

engine以下 a 的典型main函数中的变量QtApp是 的有效实例QQmlApplicationEngine

是否可以访问派生类QQmlApplicationEngine的函数内部的对象?QQuickItem如果是,如何?

请注意,TestItem注册在qml侧面并显示在主窗口上。我知道我可以通过QQmlApplicationEnginefrommain方法。但是,我有一种预感,因为 myTestItem是窗口的一部分并拥有上下文。应该有一种方法可以获取对象或指针QQmlApplicationEngine而不必从main方法传递?

目标:使用QQmlApplicationEngineI 可以访问QQuickItemmy中main.qml的 s :

所以为了做到这一点,我想要QQmlApplicationEngine. 如果有一种方法可以从一个内部访问其他QQuickItems,那么请提出建议。

0 投票
0 回答
2025 浏览

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 。

通过这里的讨论进行了检查。此链接中的讨论以抱怨我来到这里的相同警告结束。我的问题是我应该纠正什么以避免该警告?

0 投票
0 回答
597 浏览

c++ - 如何更新仅在 C++ 级别创建的 QQuickItem

我有一个QQuickItem如下所示的派生类

我也有自己的TextureNode课。

我已经MyQQuickItem在 QML 端注册并嵌入main.qml如下。

在某个信号的触发上,我已经连接到一个插槽MyQQuickItem,我调用this->update(). 这当然会触发updatePaintNode,我可以MyQQuickItem用我想要的新内容重新绘制我的内容。

是否可以触发updatePaintNodeaQQuickItem而无需在 qml 文件中声明它?

MyQQuickItem在 C++ 级别动态创建我的,并且根本没有在main.qml我如何做到这一点中定义或声明它?

核心问题如何在 C++ 级别创建一个 QQuickItem,它可以通过调用 update 来更新新内容,以便触发 updatePaintNode?

更新: 我可以通过QQuickItem以下方式创建一个。

但问题是updatePaintNode我打电话时无法开火this->update我应该怎么做才能让我QQuickItem自己更新?

0 投票
0 回答
503 浏览

qt - 如何从库中加载自定义 QQuickItem,以便它像应用程序中的其他 QQuickItems 一样注册和更新

我有一个MyQuickItem派生自QQuickItem以下的类

以下是MyQuickItem.qml.

需要注意的是,以上所有 C++ 和 qml 代码都在一个单独的静态库中。图书馆里有qrc一个MyQuickItem.qml。这个库也可以访问QQmlApplicationEngine应用程序的全局对象。

我的问题:如何从我的库中加载,以便它像应用程序中的其他 sMyQuickItem一样在 QML 中注册?QQuickItemmain.qml

在应用程序加载 main.qml 之后调用的 C++ 方法中,我正在我的库中尝试以下方式:

首先,我不知道如何链接QUrl(QStringLiteral("qrc:/qml/MyQuickItem.qml"))myItem指针。

其次,执行上述操作似乎无法MyQuickItem 正确加载,因为我没有接到updatePaintNode我已覆盖的呼叫。我需要Qt/QML窗口系统来调用我MyQuickItem::updatePaintNode的,因为我在那里有重要的逻辑。

那么,我怎样才能MyQuickItem从我的库中正确加载,以便它像其他QQuickItems 一样注册和更新?

0 投票
1 回答
1687 浏览

qt - 如何将动态创建的 QQuickitem 添加到我的应用程序的 main.qml 或 QML 项目列表

我需要动态创建一个QQuickitem& 添加到我的main.qml.

尝试这样做,我QQuickitem通过以下方式创建一个。

我可以访问QQmlApplicationEnginein 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_quickitemnull 这意味着我创建的 QQuickItem 从未被添加

0 投票
1 回答
2172 浏览

qt - 如何从 C++ 中检索 QML 属性的值?

QQuickItemmain.qml.

我在C++ 端my_quick通过以下方式获取对象。

如何quickProperty使用 C++ 端获取 set 的当前值my_quick_ptr