简述
QGraphicsDropShadowEffect可以为Qt中的控件提供阴影效果。
使用setColor()函数来设置阴影颜色,使用setOffset来设置阴影偏移,使用setBlurRadius()来设置阴影模糊半径。
默认的阴影是半透明黑灰色,1px模糊半径,向右下角8px偏移。
使用
效果
源码
QPushButton pushBtn = new QPushButton("test");
QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect;
shadowEffect->setOffset(5, 5);//设置偏移
shadowEffect->setBlurRadius(5);//设置模糊半径
shadowEffect->setColor(QColor(0, 0, 200, 200));//设置颜色
pushBtn->setStyleSheet("QPushButton {background-color: red}");
pushBtn->setGraphicsEffect(shadowEffect);
QGraphicsDropShadowEffect的使用主要是设置如下三个属性:
- 横纵偏移量:setOffset()
- 模糊半径:setBlurRadius()
- 颜色值:setColor()
使用案例
通过上面的简单的介绍,我们已经掌握了QGraphicsDropShadowEffect的基本用法,下展示一个自定义带阴影样式按钮示例。
QSS是基于CSS2的,默认不带box-shadow属性。下面基于QGraphicsDropShadowEffect来实现带box-shadow属性的按钮控件。
源码
下面是按钮的源码,在设置样式表时要用setQSS(),而不是setStyleSheet(),其余的用法和QPushButton一样。
class MyPushButton : public QPushButton
{
Q_OBJECT
public:
MyPushButton(QString str, QWidget *parent = nullptr) : QPushButton(str, parent)
{
shadowEffect = new QGraphicsDropShadowEffect;
setGraphicsEffect(shadowEffect);
}
void setQSS(QString str)
{
QString pattern = "box-shadow: (.*\\d+)px (.*\\d+)px (\\d+)px rgba\\((\\d+), (\\d+), "
"(\\d+), (\\d+)\\);";
QRegExp *re = new QRegExp(pattern);
re->indexIn(str);
QStringList list = re->capturedTexts();
qreal dx = list[1].toDouble();
qreal dy = list[2].toDouble();
qreal blurRadius = list[3].toDouble();
int r = list[4].toInt();
int g = list[5].toInt();
int b = list[6].toInt();
int a = list[7].toInt();
QColor color(r, g, b, a);
drawShadowEffect(dx, dy, blurRadius, color);
str.replace(QRegExp(pattern), "");
setStyleSheet(str);
}
private:
QGraphicsDropShadowEffect *shadowEffect;
void drawShadowEffect(qreal dx, qreal dy, qreal blurRadius, QColor color)
{
shadowEffect->setOffset(dx, dy);
shadowEffect->setBlurRadius(blurRadius);
shadowEffect->setColor(color);
}
};
使用
MyPushButton *btn = new MyPushButton("test");
btn->setQSS("QPushButton { background-color:red;box-shadow: 5px 5px 5px rgba(0, 0, 200, 200);}");
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(btn);
效果
引用
[1] Qt助手