问题标签 [qqmlcomponent]
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.
initialization - 不使用 SetContextProperty 的已加载 QML 组件的 SetProperty
我有一个 C++ 插件系统,其中创建了 QQmlComponent 并在用户请求新插件实例时加载了 qml 文件。
目前我正在使用 setContextProperty() 来告诉 QML 正确初始化所需的 QObject。
问题是,在实例化第二个插件时,两者都将使用第二个插件的控制器,因为“控制器”在 QML 中是全局的。
有没有办法在本地设置上下文属性(仅适用于当前实例)?
我找到了使用 setProperty() 或 QQmlIncubator 和 setInitialState() 的解决方案,但它们似乎都需要一个已经从我的组件创建的对象。但在我的插件中,我只定义了组件,该组件通过 Loader 项加载到主应用程序中。因此,在尝试这些方法时,我总是在项目的副本中设置值,而不是在我的后端创建的那个。
如何访问在 QML 中创建的组件的属性?
即使我在 MyPlugin.qml 中定义了该属性,也不会给我任何结果。
qt - 如何将 X 和 Y 转换值应用于 C++ 端的 QQuickItem
我有以下QML Rectangle
具有父项的内容。需要注意的最重要的事情是它应用了一个Translate QML 元素,我正在努力理解它究竟对 QML 项及其应用的子项做了什么。
代码:
rect_parent
transform: Translate
如您在上面的代码中所见,有一个属性。以下是应用于它的 XY 平移
在我的代码的 C++ 部分中,我通过以下方式main.cpp
获取QQuickItem
s 。
是的,我可以通过以下方式获得x
and y
。rectQuickItem
问题:
但是我如何得到rectQuickItem
翻译的 x 和 y?
我发现这并不是 UI 上实际应用的 x 和 y item_x
。item_y
这似乎transform: Translate
是向 x 和 y 添加了一些rect
我在查询时没有得到的单位rectQuickItem->x()
。
用更简单的话来说,我需要-20
and-30
应用于 x 和 ytransform: Translate
块中rect_parent
,最终适用于rect
目标:
我正在更改父级rectQuickItem
以将其显示在另一个窗口上,其 x 和 y 位置与原始父级相同。我需要添加到属性的单位x
和y
属性,rectQuickItem
以便在视觉上与前一个父级相同的位置transform: Translate
显示。rect
附加问题:
QQuickItem ::MapToItem会以任何方式帮助我吗?
python - 将属性注入 QML 组件
我对 Qt/PyQt 相当陌生,目前正在努力使用一些基本功能。我想要做的是,从 python 动态加载 QML-Views (*.qml) 文件并动态替换特定内容。例如,一个复选框被选中,我当前视图的一部分被另一个 qml 文件替换。首先,我想通过 PyQt 提供这个逻辑,但似乎 StackView 是一个更好的主意(pyqt 中有多个 qml 文件)。
但是,在这种情况下,我无法将属性注入到我的 QML 文件中。我只能将一个属性注入到 rootContext 中。然而,这限制了我的 QML 视图的使用,因为我一次只能使用一个视图(相同类型)。我想将属性动态注入到 QML-Views 中,并使它们只对这个特定的视图可见。在这种情况下,我可以在后端使用多个对象多次使用同一个视图来捕获信号。
这是我的 SimpleMainWindow.qml 文件(主视图:
这里是我尝试加载的文件(TestViewButton.qml):
Python文件加载QML-View(组件)
还有我用来处理来自视图的信号的python对象(SignalHandler.py):
按钮加载正常(顺便说一句,有没有更好的方法来识别我想要添加按钮的父级,没有使用 findChild 的任何外观)。不工作的是 component.setProperty.... 部分。如果我在引擎的 rootContext 中设置属性,它可以正常工作(调用 SignalHandler 方法)。已经检查过类似的主题(比如从另一个 qml 文件动态加载一个 qml 组件并访问该组件的 qml 类型属性......)
这是可能的,还是我这里有问题?
谢谢
c++ - Dynamically created Custom QML object not visible
I have a custom QML item called "Cell.qml" which I'd like to insert dynamically in my root window and make it visible. I also tried changing the z property, but I couldn't fix it, the object is still invisible (even tough the output of root->dumpObjectTree() says the object exists as a child of the root window)
This is the result after executing the code
main.cpp
main.qml
Cell.qml
Output of root->dumpObjectTree();:
qt - Qt:Qml:创建对话框时关注文本字段
我有一个包含两个文本字段的简单对话框。我想在对话框出现labelField
时让文本字段聚焦。AddPasswordDialog
我怎样才能做到这一点?
我问了这个问题,并被要求提供一个 MCVE,我在这里提供它。如果您需要,请询问更多信息。
main.qml
HomeForm.qml
AddPasswordDialog.qml
main.cpp
c++ - 是否可以从 C++ 创建 Qml 组件?
有没有办法从 C++ 创建/附加 QML 组件?
例如,如果我有这个 QML:
TextInput
是否可以在矩形上附加一个?
qt - QML 嵌套项的名称
我正在尝试使用 QQmlComponent 解析 QML 文件:
但我还需要 QML 源代码中提到的每个子项的名称。对于 root,它是“MyModel”,但如何为孩子们获取它?objectName
对他们来说是空的。
c++ - 如何在一个 qt qml 窗口中运行和显示 4 个可执行文件?
我有 4 个不同的可执行程序,您可以认为它们是相同大小的空矩形窗口,我想在一个 qt qml 窗口中运行这些 exe。
a、b、c、d 是固定相同大小的不同可执行文件,x 是用 qt5.11/qml quick2 编写的窗口,我如何在 qt/qml 项目中做到这一点,有什么想法吗?
我正在尝试使用窗口容器,但没有进展。该 exe 正在将其窗口 ID 写入文本,而我正在读取该文本。
c++ - 从 c++ 对象动态创建 qml 对象(使用 setContextProperty)
我正在尝试使用 c++ 类的对象在 c++ 中动态创建一个 qml 对象。下面是我的方法的最小代码。执行此代码并单击后,应用程序崩溃(请参阅 main.qml 中的注释)。
我已经粘贴了下面的代码,可以在这里下载。
主文件
场景.h
场景.cpp
main.qml
myrect.qml
更新
要创建的对象不是主窗口根的子项,而是主窗口根的子项链中的一项的子项。伪结构如下所示。
main.qml
customitem1.qml
qt - 在布局中指定动态创建的 QML 组件的索引?
我正在使用 Javascript 通过以下方式动态创建 QML 组件:
在这种情况下, parentLayout 是 aColumnLayout
并且它总是在子列表的末尾创建对象(这意味着它显示在列的底部)。
如何在放置对象的子项中指定索引位置,或者如何在实例化后的子项列表中移动它?
(我尝试分配parentLayout.children[i]
无济于事)
用例:我有一个大型的现有多级(嵌套)菜单系统,它是静态的,但我想在层次结构中插入和删除自定义子菜单项,以响应通过服务 API 注册/注销的外部插件。虽然我们可以将菜单系统完全重新实现为动态树视图,但动态插入几个菜单子项似乎有点过头了。