问题标签 [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 实例
好吧。我已经搜索了很多,但还没有一个好的解决方案。我是新手Qt
。我有一堂课是QQuickItem
这样的,
我qmlRegisterType
在我的旁边做一个这样的main.cpp
注册,qml
qmlRegisterType< MyQuickItemClass >("MyQuickItemClass", 1, 0, "MyQuickItemClass");
到这里为止一切都很好。但是->我想在 MyQuickItemClass 中设置一个对象实例和一些属性,其中还有一些 C++ 逻辑,然后将MyQuickItemClass
对象传递给qml
. 或者,MyQuickItemClass
从 Qml 获取一个有效的实例。如何从C++ 端获取 vlid 实例MyQuickItemClass
对象实例?QML
main.cpp
我尝试从此处的链接中进行以下学习。但是这种技术会创建两个独立的MyQuickItemClass
. 一个来自QML
,一个来自c++
侧面。因此对我不起作用。
以下是我经过大量搜索后尝试执行此操作的方法。
但是,执行上述操作会MyQuickItemClass
调用两次的构造函数。cpp
当我创建一个对象时,一次是从侧面,一次是从侧面qml
。通过在构造函数中放置断点来验证这一点MyQuickItemClass
。结果,我在程序运行时someCppClassObject
设置的内部为空。因为 qml 已经对实例化MyQuickItemClass
进行了最后调用,因此忽略了我在.MyQuickItemClass
MyQuickItemClass
main.cpp
这是我的qml
代码MyQuickItemClass
:
这是 C++ 类,其对象需要设置为MyQuickItemClass
.
请注意,我需要保持MyQuickItemClass
从QQuickItem
. 请建议...
c++ - 如何在 C++ 端获取 QQuickItem 的 C++ 对象实例
我有QtApp
一个纯 C++ 库。C++ 库公开了一个简单的类,称为MyCppLibApiClass
. 有QtApp
一个嵌入在main.qml
. 以下是课程:
遵循以下qml
代码quick item
:
以下是我main.cpp
加载qml
项目的展示:
MyQuickItem
需要访问MyCppLibApiClass
实例。我如何获得一个有效的MyQuickItem
实例main.cpp
?我需要MyCppLibApiClass
在MyQuickItem
. 我可以使用 setter 方法来做到这一点。但是,首先我需要获得一个有效的实例MyQuickItem
。那么如何访问MyQuickItem
inmain.cpp
呢?
编辑:
在问这个问题之前,我已经搜索了很多。我通读了这个链接。另外,我发布的这个问题并没有给我一个准确的答案。因此,更清楚地改写我的问题以尝试得到答案。感谢对此的建议..
c++ - 如何创建具有预定义状态的自定义 Quick QML 项目
我对 Qt 很陌生,所以我可能会问一个非常明显的问题。
我想为我想用 C++ 创建的所有自定义 QML GUI 元素创建一个超级类型。这个超类型应该为 QML 项目添加预定义的状态。与此类似:
我知道如何从本教程(http://doc.qt.io/qt-5/qtqml-tutorials-extending-qml-example.html)创建一个简单的自定义项。我猜这些状态可以通过在继承自QQuickItem
. 然而,本教程并未展示如何创建更复杂的 Qt Quick 元素,例如状态列表。
所以我想知道的问题如下:
- 甚至可以预定义 QML 状态类型并在多个元素中使用它们吗?
- 如何在 C++ 类中添加复杂的 QML 类型,例如状态列表
StatedGuiElement
?
c++ - QQuickItem 中 focusInEvent 和 focusOutEvent 的用途
它的基本 Qt5 问题,一些解释它们的行为会很好。
在 QQuickItem 的情况下,我对 focusInEvent/focusOutEvent 感到困惑。由于 QQuickItem 具有 activefocus 的概念,它会通过 ItemChanged 事件通知项目,因此仅当 QQuickItem 的 activeFocus 为 true 时才会触发 focusInEvent/focusOutEvent ,否则项目将不会收到这些事件。
当 focusOutEvent 出现时我也遇到了一些情况,但它不会改变 Item 的 activeFocus。
focusInEvent/focusOutEvent 如何与项目的活动焦点相关,以及检查 QuickItem 焦点/不焦点的基于方法是什么,依赖于 activeFocus 或假设 focusOutEvent ?
qt-quick - QQuickView 和 QQuickItem 有什么区别?
我想继承 QQuickItem 而不是 QQuickView 来使用 QQuick 类在 C++ 中编写接口。根据 Qt 文档中提供的解释,我了解 QQuickView 加载 qml。 QQuickView 用于将可显示的 QML 对象集成到应用程序的用户界面中。 QQuickItem 就像 QWidget (我可能在这里错了)。 QQuickItem 类提供了 Qt Quick 中所有可视项目中最基本的。 有人可以详细说明吗?
提前致谢
c++ - 创建 QQuickItem 子类的实例是否存在我不打算渲染或添加到 QML 树的实例?
如您所知,QQuickFramebufferObject::Renderer 子类不应直接访问其父项的属性,而应在其synchronize()
方法中将它们复制到自身。所以代码看起来像这样(使用这里AUTO_PROPERTY
的宏):
我想避免在两个类之间重复声明属性,所以现在我正在实现这个替代解决方案:
如您所见,我仍然需要编写和维护复制代码,但它比其他方式更好。
这样做有什么问题吗?(创建一个 QQuickItem 子类的实例,我不打算渲染或添加到 QML 树的实例)。
从文档中引用:
这对于从 C++ 代码创建 QML 对象很有用,无论是显示可以可视化呈现的 QML 对象,还是将非可视 QML 对象数据集成到 C++ 应用程序中。
这似乎暗示这种非视觉使用是一种预期和受支持的用例。但我不确定我读对了。
qt - 如何在 QQuickPaintedItem 中以有效的方式绘制顺序图像
出于某种原因,我需要将 opencv VideoCapture 包装在一个将在 Qt Quick 中使用的类中。
有两个类,一个是Camera,另一个是CameraView。CameraView 继承自 QQuickPaintedItem。
相机类将定期获取图像。它通过 QObject::startTimer(int interval) 实现。(例如,如果网络摄像头的 fps 为 30,则计时器间隔为 1000 / 30 - 8,8 为时间偏差)。一旦Camera得到图像,它通过调用CameraView::Update()通知CameraView重新绘制。
在 CameraView::paint(QPainter *) 中,CameraView 将从 Camera 类中获取图像的副本,并通过调用 QPainter::drawImage(...) 绘制该图像。
我在编码过程中遇到了一些问题:
我尝试用 QThread 替换时间事件以定期从相机获取图像。当我在 QThread 中调用 CameraView::Update() 时,CameraView 不会重新绘制。问题是什么?
在我的笔记本电脑中,当我让 CameraView 全屏绘制图像时,我发现一个 python 程序变慢了。是另一种成本更低、效率更高的绘画方式吗?
qt - 如何将 QOpenGLFramebufferObject 渲染到 QQuickItem
我正在使用 Qt 5.6 及更高版本。我有一个QQuickItem
放在我的子类main.qml
在我的main.cpp
注册MyQQuickItem
中使用qmlRegisterUncreatableType
. 它在应用程序主 UI 屏幕上显示良好。
现在,我有一个有效的纹理,即QOpenGLFramebufferObject
. 我只想QOpenGLFramebufferObject
在MyQQuickItem
.
也许我应该调用 update 以MyQQuickItem
某种方式为其提供这种纹理?怎么能做到这一点?
c++ - 如何将保存的纹理直接映射到 QuickItem 上并显示它?
在我Qt app
的 with 中C++
,我使用QQuickItem
派生类通过在每个帧渲染上运行一些过滤器来显示在每个帧渲染上生成的纹理。这很好用。
接下来,我使用takeTexture
提供的方法QOpenGLFramebufferObject
来保存一些纹理并在需要时将它们显示回来。这些保存的纹理是 s 类型GLuint
的。我可以使用普通的 OpenGL 渲染管道将其显示回来。它运作良好。
但是,有没有办法可以避免渲染管道调用并将 GPU 内存上保存的纹理直接映射到我的QQuickItem
?
c++ - 尝试使用 QQmlListProperty 时出现 Qt 编译器错误
我正在尝试使用 QQmlListProperty 从 QQuickItem 中公开 QList - 并遵循以下文档:
一个简化的例子:
但我收到编译器错误return QQmlListProperty<QObject>(this, &m_vurms);
:
我还尝试用 int 的 QList 替换 Vurm 的 QList - 问题似乎出在 Qt 在做什么QQmlListProperty<T>(this, &m_vurms);
我正在使用 Qt 5.8 编写/编译,并且在 .pro 文件中设置了 C++11。我正在 Windows 10 上的 Qt Creator 4.2.1 中编译:使用 MSVC 2015 64 位进行编译。