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

0 投票
1 回答
763 浏览

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...”一样换行。

0 投票
3 回答
4270 浏览

qml - 如何内联定义 QML 组件并覆盖属性?

我正在尝试并在看似简单的事情上失败了:内联定义一个简单的文本格式化组件,然后用不同的文本多次实例化它。这是代码

在 Loader 行,文本属性无效。在组件上定义属性或别名的尝试被拒绝,并显示“组件对象无法声明新属性”。

我在文档中找到的唯一示例显示了覆盖内联组件中定义的x属性。Rectangle在我看来,覆盖元素的text属性是类似的。Text

我怎样才能做到这一点?

0 投票
2 回答
1244 浏览

qt - 如何将组件属性设置为未定义?

我有一个类型的属性Component

每当我想将其设置为它时undefined,都会引发错误。我该如何设置它undefined
更新
正如您在我的示例代码中看到的,我想sourceComponentloader完成动画后分配。所以我需要财产不正常alias

0 投票
1 回答
392 浏览

qt - 在运行时从 C++ 创建 ObjectModel

是否可以在运行时从 c++ 创建 ObjectModel?

我有一个基于插件的应用程序,每个插件创建一个QQmlComponent并设置信号和插槽,然后将组件提供给主应用程序以在 a 中呈现ListView,为此我希望ObjectModel在 c++ 端有一个并在那里操作它。

main.qml(主应用程序界面):

主要区域项目:

第一次尝试时,我想从 c++ 端访问 MainArea 项,并使用从插件返回的 QQuickItem* 调用 addReport 函数,但没有运气。

主.cpp:

IReport 插件接口:

主应用截图

0 投票
1 回答
1321 浏览

qt - 如何最正确/有效地刷新来源已更改的项目?

我从文件系统中加载了一个已更改的 qml 文件,但是由于第一次加载它,它也被缓存,即使Loader通过将源组件设置为“重置”它也不会刷新undefined

之前也有人问过类似的问题,但是出于以下几个原因,我想更进一步:

  • 那里接受的回答建议engine->trimComponentCache()不幸的是使用它只工作一次然后停止,没有进一步的更新反映
  • 在下面的评论中,OP 建议engine->clearComponentCache()每次都有效,而且确实有效。然而,这个方法的文档让我对它的用法有点不安:

此函数会导致引擎先前加载的所有组件的属性元数据被销毁。所有先前加载的组件以及从这些组件创建的所有现存对象的属性绑定都 将停止运行

这听起来很不祥,尤其是粗体部分,因为我没有重新加载我的整个应用程序,它只是一个相当大的应用程序的一小部分,它需要保持完整,同时刷新那个特定的外部 qml 文件反映其变化。

第二部分你听起来更有希望:

此函数将引擎返回到不包含任何加载的组件数据的状态。这对于重新加载先前组件集的较小子集或加载先前加载的组件的新版本可能很有用。

清除组件缓存后,必须先加载组件,然后才能创建任何新对象。

所以它确实给人的印象是这个方法可以用来只重新加载一个子集而不会破坏现有的代码。然而,即使是这样,也需要大量额外的工作来为新实例化的对象重建所有缓存,而不是简单地为更改的特定 qml 源清理缓存。

此外,我一直在考虑一个更复杂的解决方案,包括创建一个自定义 QML 元素,它本质上是一个围绕一个全新 QML 引擎的包装器,它呈现给 FBO 并将输出显示为我的“主”中的一个对象发动机,从而完全隔离两个发动机。但是,我并不热衷于做所有额外的工作,并引入另一个完整运行引擎的开销。

那么有什么想法吗?

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 回答
584 浏览

qt - 如何创建 QQuickItem 的单独副本并将其呈现在不同的窗口上

我有一个QQuickItem像这样从 C++ 端获取的。

my_item是有效的,并且设置了所有属性。

场景
我有2 个窗口需要QQuickItem交替绘制。我想把它渲染my_item到另一个窗口。只要我将父级设置my_item为另一个窗口,这一切都很好

这需要我setParentItem再次回到my_item的原始窗口,否则它在原始窗口上不可见。这是有效的,但给了我不必要的依赖。相反,我正在尝试创建QQuickItem& 的副本并setParentItem对其进行操作。通过这样复制:

问题:
但这似乎没有创建QQuickItem& 的副本,因此我没有看到my_itemon的副本the_other_window

问题:
我想知道的是,我怎样才能创建一个有效的副本 aQQuickItem到另一个指针QQuickItem * item_copy中并在另一个窗口上渲染它而不影响原始的可见性/状态QQuickItem

0 投票
1 回答
582 浏览

qt - 如何在 C++ 端从头开始创建一个新的 QQuickItem 副本,其属性与现有副本相同

我有一个QQuickItem像这样从 C++ 端获取的。

my_item是有效的,并且设置了所有属性。

场景
我有2 个窗口需要QQuickItem交替绘制。我想把它渲染my_item到另一个窗口。只要我将父级设置my_item为另一个窗口,这一切都很好

这需要我setParentItem再次回到my_item的原始窗口,否则它在原始窗口上不可见。这是有效的,但给了我不必要的依赖。相反,我正在尝试创建QQuickItem& 的副本并setParentItem对其进行操作。通过这样复制:

问: 我想做item_copymy_item. 我了解到这QQuickItem是不可复制的。所以,想要设置my_iteminto的所有属性item_copymy_item从而从头开始重建。我怎样才能做到这一点?我应该主要复制哪些属性?宽度,高度,x,y & 还有什么?

有没有一种方法可以将所有有效属性复制到这个新属性中而无需逐一复制?

0 投票
2 回答
702 浏览

qt - Qt 组件将采用模型并将其显示在页面中分隔的网格中

我想创建一个可重用的组件,我可以在其中传递一个模型,即

["red", "green", "blue", "black", "orange", "pink", "gray", "navy", "magenta"]

它会填充Grid模型数据的矩形。如果模型中有超过 6 个项目,它将填充其他“页面”。

它应该是这样的: 例子

目前我使用StackLayout有 2Grid件物品,Repeater在它们内部,我将模型分为 2 件:

用矩形填充每个“页面”。

编写逻辑以将模型动态分离为每个页面的单独部分似乎过于复杂。我已经尝试过GridView,但我找不到重要的属性,例如Grid

我的例子的来源:

0 投票
0 回答
713 浏览

qt - QML 图像点击像素

我有一个加载到快速地图项中的图像,我只想在用户单击图像时找到像素行和列,我怎样才能得到它?谢谢

这是我的代码