问题标签 [qqmlcontext]
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 - 更改 QML 对象的 QQmlContext?
显然,即使对象从现有的父级分离并附加到新的父级,当旧的父级上下文被销毁时,对象也是如此。
想到的第一个解决方案是在持久上下文中创建对象。但是,动态范围属性将不适用于它。这对我的用例至关重要。如果对象不在它的父对象的上下文中,并且父对象发生更改,我将无法运行。此外,即使目标对象具有函数,也不能再调用函数,因为 QML attempted to evaluate a function in an invalid context
.
试图诉诸QQmlEngine::setContextForObject()
并QQmlEngine::contextForObject()
只是发现一旦设置,上下文就无法重置。
那么,有什么新鲜想法吗?
c++ - Qt - 如何从 C++ 类动态插入 Qml 对象
我需要关于我的简单QT/QML应用程序的建议。
我有以下情况:
关于界面,我有一个名为“flickableArea”(flickableArea.qml)的主要区域,分为四个区域(item slot1、item slot2、item slot3和 item slot4)。
每个插槽都填充有 QML Rectangle 对象。
slot1由 id= area1的矩形填充,slot2由 id= area2的矩形填充,slot3由 id= area3的矩形填充,slot4由 id= area4的矩形填充
文件flickableArea.qml
当在 c++ 代码中触发定义的信号时,我应该在area1、area2、area3和area4中动态插入 QML 对象。在 c++ 代码上,当信号被触发时,我运行以下代码来创建一个连接到 Object.qml 的新对象 (ObjectToIntroduce):
在我创建了一个新的 ObjectToIntroduce 之后,如何在 flickableArea.qml 的 area1/area2/area3/area4 中引入/销毁(查看/隐藏)Object.qml?
我想知道实现这种机制的最佳方式是什么,编写这个简单的 Qt/Qml 应用程序。感谢您的建议,最好的问候
乐乐
c++ - 我可以从 C++ 访问包含 QtObject 的 QQmlContext 吗?
我有一个 sorta-singleton 辅助对象,但是,我不想成为一个真正的单例,因为我更喜欢将东西放在堆栈/堆上。所以我在堆上创建了它,并将它设置为我的根QQmlContext的contextProperty。我还有一个 C++ 中的 QObject 子类,它在 QQmlContext 的对象树中实例化。
我可以从 C++ 访问包含 QObject 的 QQmlContext 以访问相关的 contextProperty 吗?
我知道我可以做这样的事情:
但这意味着我必须始终使用“cp:_cp”样板来阻塞我的 MyQObjectSubclass QML 实例。
c++ - 设置 QML 上下文失败
我正在尝试将 C++ 类连接到 QML,但我遇到了一个问题,编译时出现以下错误。
我正在添加图像以显示错误:
我正在使用一个简单的类来测试我的代码是否有效,这是代码 testing.h:
和 testing.cpp:
和 main.cpp:
和 main.qml:
c++ - 将数据从 c++ 加载到 QML Scatter3d 项
我正在尝试开发示例“qmlscatter”的修改版本,可在 Qt 示例中使用。我的目的是通过修改“Data.qml”文件的数据点,在 3D 环境中绘制飞行轨迹。飞行路径的实际坐标存储在三个不同的QVectors QVector<double>
“cogPosX_”、“cogPosY_”和“cogPosZ_”中,每个索引代表后一个时间步长。
正如论坛提到的,我需要使用“.setContextProperty”函数来更新 QML 文件中的数据值。但是,我无法真正找到如何让它工作。我想主要原因是我没有引用正确的“dataModel”id。这里有我的代码:
datapointobject.h // 这应该定义一个通用对象,其中包含每个数据点的 XY 和 Z 坐标。
datapointobject.cpp // 这定义了构造函数和函数。
threeDviewer.h // 这个头文件定义了“Flightviewer”类,它创建了一个 QQuickView 实例,负责绘制 3D 散点图。
threeDviewer.cpp //这个文件配置QQuickView viewer
实例。它负责将航班数据导入到 QML 数据文件中。
'QQuickViewer viewer' 在外部函数中初始化,使用以下命令:
qml 文件中的数据与“qmlscatter”示例中的定义完全相同:
数据.qml:
数据由定义 Scatter3D 项的 main.qml 文件访问:
main.qml
如果您能给我一些有关如何正确编程的提示,我将不胜感激。预先感谢!
c++ - 向 QML 公开 C++ 对象并监听更改事件
我有一个在 C++ 中定义的对象,并且正在尝试向 QML 公开一个成员字符串。该类定义为:
所以我试图将mFoo
对象公开给 QML。现在,我将应用程序上下文设置为:
现在在我的 qml 中,我怎样才能听到我公开的字符串的变化。所以我想要一个每次mFoo
成员发生变化时都会调用的监听器方法。
c++ - 从 c++ 对象动态创建 qml 对象(使用 setContextProperty)
我正在尝试使用 c++ 类的对象在 c++ 中动态创建一个 qml 对象。下面是我的方法的最小代码。执行此代码并单击后,应用程序崩溃(请参阅 main.qml 中的注释)。
我已经粘贴了下面的代码,可以在这里下载。
主文件
场景.h
场景.cpp
main.qml
myrect.qml
更新
要创建的对象不是主窗口根的子项,而是主窗口根的子项链中的一项的子项。伪结构如下所示。
main.qml
customitem1.qml
qml - FileDialog(QtQuick Object)中实例化一个c++类,报错:Cannot assign object to property
代码:
我很好地编译代码并运行,然后得到如下错误:
QML 调试已启用。只能在安全的环境中使用。(爬取:这是另一个问题,您可以忽略)
QQmlApplicationEngine 加载组件失败
qrc:/main.qml:22 无法将对象分配给属性
而另一个组件,如Page、Window、Button,可以实例化 C++ 类。怎么了?
c++ - 是否可以列出 QQmlContext 的上下文属性名称?
我想知道是否可以获得特定的所有上下文属性名称QQmlContext
。
所以我可以做类似的事情:
QObject
我为's with obj->metaObject()->propertyCount()
and then实现了类似的功能obj->metaObject()->property(i)
。
qt - 将 c++ 发出的信号连接到 qml 连接
我正在从 c++ 发出信号并尝试使用 qml 中的 Connections 获取值。然而,代码正在编译,由于某些未知原因,qml 无法识别“ OnSomethingHappened ”,并且从 c++ 发出的信号是“ somethingHappened ”。
我知道可以有其他解决方案,但我需要在 qml 中使用连接。这是因为 qml 中使用的架构。
qmlclient.h
qmlmqttclient.cpp
主文件
main.qml
在运行上面的代码控制台显示