gpt4 book ai didi

c++ - 在 Qt 中禁用 setGraphicsEffect 继承

转载 作者:行者123 更新时间:2023-11-28 06:12:13 35 4
gpt4 key购买 nike

如何在 Qt 中禁用子级的 setGraphicsEffect 继承?

例如,假设我的项目具有以下层次结构:

enter image description here

当我使用 setGraphicsEffect 将阴影应用于框架时,线条编辑将继承该阴影效果,而我不希望这样。这就是我得到的:

enter image description here

如您所见,行编辑的字母周围有阴影。知道如何解决这个问题吗?

还有一件事.. 在 MainWindow 上方的图像中明显有一些标志,如 Qt::FramelessWindowHint 和 Qt::WA_TranslucentBackground 所以框架应该是“窗口”,当我调整 MainWindow 大小时框架自动调整大小所以我无法更改该层次结构。

根据 Timusan 的要求,这里是影子的代码: Qt: shadow around window

将其应用于框架:

CustomShadowEffect *shadow = new CustomShadowEffect();    
shadow->setColor(c);
shadow->setDistance(scale);
shadow->setBlurRadius(blur_radius);
ui->frame->setGraphicsEffect(shadow);

更新

layout()->addWidget(ui->lineEdit);  

最佳答案

QGraphicsItem::setGraphicsEffect 的文档指出

Note: This function will apply the effect on itself and all its children.

因此您期望的行为是正确的。

我的建议是通过调用 setGraphicsEffect(NULL) 或通过获取线编辑,然后在您对框架应用自定义效果后将其设置回去。我不确定行编辑是否有默认效果,因此不确定 NULL 方法是否可行。

更新

正如 OP 所述,通过使用 null 调用 QGraphicsItem::setGraphicsEffect 来覆盖现有效果的提议方法不起作用。因此,鉴于我看到了 2 个进一步的可能性:

  • 不要使 QLineEdit 成为框架的子项(不确定这是否可能,您提到框架不能与窗口解除绑定(bind)但没有关于框架到行编辑关系约束的内容)。
  • 由于您已经使用 CustomShadowEffect 对图形效果进行了子类化,因此您可以调整 draw() 方法以忽略对属于的 QPainter 的调用到行编辑。你可以做的是在效果中保留一个被忽略的 QPaintDevice 实例列表 - QWidget 继承 QPaintDevice 并且你可以查询 QPaintDevice 来自 QPainter 的指针 QPainter::device , 所以你可以简单地将小部件添加到你的内部列表,然后在 draw 方法中将传入的 QPainterQPaintDevice 与被忽略的进行比较.

关于c++ - 在 Qt 中禁用 setGraphicsEffect 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31038198/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com