问题标签 [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.
qml - 从另一个 qml 文件动态加载 qml 组件并访问该组件的 qml 类型属性
我在 StackOverflow 中查看了有关此主题的其他问题,但对我没有帮助。我是 QML/Javascript 的新手,我浏览了关于这个问题的 QML 文档,但没有帮助。
下面是一个文件“SmallWindow.qml”
我有另一个文件'FileDetailWindow.qml。在这个文件中,在函数“showDetailWindow”中,我想访问和更改 devViewNameComponent(来自 SmallWindow.qml)viewName 的宽度。我无法访问 viewName,我不确定使用该组件是否是正确的方法。
编辑1:我想修复“showDetailWindow()”内文本(id:viewName)的大小,因为viewName文本的长度将动态更改。
如您所见,viewName Text 在 Rectangle (id:statusRect) 内部,statusRect 的宽度、高度不会改变,而颜色会根据函数 calStatusColour() 而改变。
目前,问题是如果 viewName 长度大于 statusRect 并且我想在 statusRect Rectangle 的宽度内缩短 viewName 文本,则 viewName Text 超出了 statusRect 。例如。如果文本超过 statusRect Rectangle 的长度,则文本需要像“NameLengthWrapped...”一样换行。
qml - 如何内联定义 QML 组件并覆盖属性?
我正在尝试并在看似简单的事情上失败了:内联定义一个简单的文本格式化组件,然后用不同的文本多次实例化它。这是代码
在 Loader 行,文本属性无效。在组件上定义属性或别名的尝试被拒绝,并显示“组件对象无法声明新属性”。
我在文档中找到的唯一示例显示了覆盖内联组件中定义的x
属性。Rectangle
在我看来,覆盖元素的text
属性是类似的。Text
我怎样才能做到这一点?
qt - 如何将组件属性设置为未定义?
我有一个类型的属性Component
。
每当我想将其设置为它时undefined
,都会引发错误。我该如何设置它undefined
?
更新
正如您在我的示例代码中看到的,我想sourceComponent
在loader
完成动画后分配。所以我需要财产不正常alias
。
qt - 如何最正确/有效地刷新来源已更改的项目?
我从文件系统中加载了一个已更改的 qml 文件,但是由于第一次加载它,它也被缓存,即使Loader
通过将源组件设置为“重置”它也不会刷新undefined
。
之前也有人问过类似的问题,但是出于以下几个原因,我想更进一步:
- 那里接受的回答建议
engine->trimComponentCache()
不幸的是使用它只工作一次然后停止,没有进一步的更新反映 - 在下面的评论中,OP 建议
engine->clearComponentCache()
每次都有效,而且确实有效。然而,这个方法的文档让我对它的用法有点不安:
此函数会导致引擎先前加载的所有组件的属性元数据被销毁。所有先前加载的组件以及从这些组件创建的所有现存对象的属性绑定都 将停止运行。
这听起来很不祥,尤其是粗体部分,因为我没有重新加载我的整个应用程序,它只是一个相当大的应用程序的一小部分,它需要保持完整,同时刷新那个特定的外部 qml 文件反映其变化。
第二部分你听起来更有希望:
此函数将引擎返回到不包含任何加载的组件数据的状态。这对于重新加载先前组件集的较小子集或加载先前加载的组件的新版本可能很有用。
清除组件缓存后,必须先加载组件,然后才能创建任何新对象。
所以它确实给人的印象是这个方法可以用来只重新加载一个子集而不会破坏现有的代码。然而,即使是这样,也需要大量额外的工作来为新实例化的对象重建所有缓存,而不是简单地为更改的特定 qml 源清理缓存。
此外,我一直在考虑一个更复杂的解决方案,包括创建一个自定义 QML 元素,它本质上是一个围绕一个全新 QML 引擎的包装器,它呈现给 FBO 并将输出显示为我的“主”中的一个对象发动机,从而完全隔离两个发动机。但是,我并不热衷于做所有额外的工作,并引入另一个完整运行引擎的开销。
那么有什么想法吗?
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 - 如何创建 QQuickItem 的单独副本并将其呈现在不同的窗口上
我有一个QQuickItem
像这样从 C++ 端获取的。
my_item
是有效的,并且设置了所有属性。
场景
我有2 个窗口需要QQuickItem
交替绘制。我想把它渲染my_item
到另一个窗口。只要我将父级设置my_item
为另一个窗口,这一切都很好
这需要我setParentItem
再次回到my_item
的原始窗口,否则它在原始窗口上不可见。这是有效的,但给了我不必要的依赖。相反,我正在尝试创建QQuickItem
& 的副本并setParentItem
对其进行操作。通过这样复制:
问题:
但这似乎没有创建QQuickItem
& 的副本,因此我没有看到my_item
on的副本the_other_window
。
问题:
我想知道的是,我怎样才能创建一个有效的副本 aQQuickItem
到另一个指针QQuickItem * item_copy
中并在另一个窗口上渲染它而不影响原始的可见性/状态QQuickItem
?
qt - 如何在 C++ 端从头开始创建一个新的 QQuickItem 副本,其属性与现有副本相同
我有一个QQuickItem
像这样从 C++ 端获取的。
my_item
是有效的,并且设置了所有属性。
场景
我有2 个窗口需要QQuickItem
交替绘制。我想把它渲染my_item
到另一个窗口。只要我将父级设置my_item
为另一个窗口,这一切都很好
这需要我setParentItem
再次回到my_item
的原始窗口,否则它在原始窗口上不可见。这是有效的,但给了我不必要的依赖。相反,我正在尝试创建QQuickItem
& 的副本并setParentItem
对其进行操作。通过这样复制:
问:
我想做item_copy
和my_item
. 我了解到这QQuickItem
是不可复制的。所以,想要设置my_item
into的所有属性item_copy
。my_item
从而从头开始重建。我怎样才能做到这一点?我应该主要复制哪些属性?宽度,高度,x,y & 还有什么?
有没有一种方法可以将所有有效属性复制到这个新属性中而无需逐一复制?
qt - QML 图像点击像素
我有一个加载到快速地图项中的图像,我只想在用户单击图像时找到像素行和列,我怎样才能得到它?谢谢
这是我的代码