问题的原因是 QGraphicsDropShadowEffect
不能同时被多个控件共享。每个 QGraphicsDropShadowEffect
实例只能绑定到一个控件上。如果你将同一个 taskbarShadow
同时设置给 ui->filemanager_memeryArea
和 ui->workspaceWidget
,只有最后一个设置会生效。
解决方法
为每个控件创建独立的 QGraphicsDropShadowEffect
实例。以下是修改后的代码:
// 设置 filemanager_memeryArea 的阴影效果
QGraphicsDropShadowEffect *memoryAreaShadow = new QGraphicsDropShadowEffect(this);
memoryAreaShadow->setOffset(5, 5); // 阴影的偏移量
memoryAreaShadow->setColor(QColor(43, 43, 43)); // 阴影的颜色
memoryAreaShadow->setBlurRadius(8); // 阴影模糊半径
ui->filemanager_memeryArea->setGraphicsEffect(memoryAreaShadow);
// 设置 workspaceWidget 的阴影效果
QGraphicsDropShadowEffect *workspaceShadow = new QGraphicsDropShadowEffect(this);
workspaceShadow->setOffset(5, 5); // 阴影的偏移量
workspaceShadow->setColor(QColor(43, 43, 43)); // 阴影的颜色
workspaceShadow->setBlurRadius(8); // 阴影模糊半径
ui->workspaceWidget->setGraphicsEffect(workspaceShadow);
关键点
-
QGraphicsDropShadowEffect
是独占的:- 每个
QGraphicsDropShadowEffect
实例只能绑定到一个控件上。 - 如果你尝试将同一个实例绑定到多个控件,只有最后一个绑定会生效。
- 每个
-
为每个控件创建独立的实例:
- 为
ui->filemanager_memeryArea
和ui->workspaceWidget
分别创建独立的QGraphicsDropShadowEffect
实例。
- 为
-
性能考虑:
- 如果需要对多个控件设置相同的阴影效果,可以封装一个函数来创建阴影效果,避免重复代码。
封装阴影效果函数
如果你需要对多个控件设置相同的阴影效果,可以封装一个函数来简化代码:
QGraphicsDropShadowEffect* createShadowEffect(QWidget *parent)
{
QGraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(parent);
shadow->setOffset(5, 5); // 阴影的偏移量
shadow->setColor(QColor(43, 43, 43)); // 阴影的颜色
shadow->setBlurRadius(8); // 阴影模糊半径
return shadow;
}
// 使用函数设置阴影效果
ui->filemanager_memeryArea->setGraphicsEffect(createShadowEffect(this));
ui->workspaceWidget->setGraphicsEffect(createShadowEffect(this));
总结
- 问题原因:
QGraphicsDropShadowEffect
是独占的,不能同时绑定到多个控件。 - 解决方法:为每个控件创建独立的
QGraphicsDropShadowEffect
实例。 - 优化建议:封装阴影效果创建函数,减少重复代码。
通过以上方法,你可以为 ui->filemanager_memeryArea
和 ui->workspaceWidget
分别设置阴影效果,且两者都会生效。