qt - 行布局内的 QML 发光
问题描述
我正在使用 Qt 5.15 Quick 2 QML 在窗口中创建一行自定义按钮。当我有一个独立的自定义按钮时,事情似乎可以正常工作,但是当我将它们放入时RowLayout
,似乎存在严重的剪切和伪影问题。
一个最小的可重现示例可能如下所示:
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
RowLayout
{
anchors.fill:parent
anchors.margins: 25
Button
{
text: "Click Me"
Layout.fillWidth: true
}
CustomButton
{
text: "That Boy Don't Glow Right"
}
Button
{
x: 100; y:100
text: "Click Me"
Layout.fillWidth: true
}
}
}
使用自定义控件
import QtQuick 2.0
import QtQuick.Controls 2.15
import QtGraphicalEffects 1.15
Button {
id: control
text: "Click Me"
Glow {
anchors.fill: control
radius: 64
spread: 0
samples: 128
color: "red"
source: control
visible: true
}
}
带有示例输出:
一种可能的解决方法是添加Glow
更改
Glow {
anchors.fill: control
width: parent.width
height:parent.height
x:control.x
y:control.y
parent: control.parent
...
但这似乎不对。首先,对我来说,在哪里parent.width
和从哪里绑定control.x
以及control.parent
在单嵌套和多嵌套中会发生什么对我来说并不明显。如果将 aCustomButton
放在另一个带有 id 的控件中control
,它会重新绑定该属性吗?如果将 RowLayout 放置在 RowLayout 中,那么它似乎需要parent: control.parent.parent
. 在我的实际代码中,也有一些重要的定位来允许阴影的边距,并且 CustomButton 在另一个容器中,所以实际工作的代码是:坦率地说x:control.x + parent.pad/2
,parent:control.parent.parent.parent
这是荒谬的,并假设非标准字段在父级中始终可用。
有没有更好的办法?希望我能保持按钮发光的能力。
解决方案
根据文档:
"注意:不支持让效果包含自身,例如通过将源设置为效果的父级。
所以很幸运,你能够让你的例子发挥作用。避免将父对象用作源的一种方法是将 Glow 对象指向 Button 的背景对象:
Button {
id: control
Glow {
source: control.background
}
}
推荐阅读
- python - scikit-learn:按名称选择列的转换器
- javascript - 如何在 p5.js 中的点数组之间绘制正方形?
- ios - 在 crashlytics swift/ios 中具有非常大的行号值的 EXC_BREAKPOINT
- node.js - 如何在 Hybris Commerce Server 上启动节点服务器
- python - Python 和 SQLAlchemy 使用 For 循环打印数据库内容
- java - 使用 Java 12 和 Gradle 进行测试不起作用
- javascript - 菜单汉堡 javascript 无法正常工作
- recursion - 惯用地避免方案中的递归限制
- c# - 以矩阵形状 UNITY 实例化预制件
- cmake - CMake 自定义目标别名