设置边框阴效果
void Dialog::on_pushButton_clicked()
{
// 设置阴影边框;
m_pShadowEffect = new QGraphicsDropShadowEffect(this);
// 阴影偏移
m_pShadowEffect->setOffset(5, 5);
// 阴影颜色;
m_pShadowEffect->setColor(Qt::lightGray);
// 阴影半径;
m_pShadowEffect->setBlurRadius(10);
// 窗口上的所有控件使用当前的阴影效果;
this->setGraphicsEffect(m_pShadowEffect);
}
使用阴影后
在使用过程中,发现不能为不同控件setGraphicsEffect同一对像,例如:
void Dialog::on_pushButton_clicked()
{
m_pShadowEffect = new QGraphicsDropShadowEffect(this);
m_pShadowEffect->setOffset(5, 5);
m_pShadowEffect->setColor(Qt::lightGray);
m_pShadowEffect->setBlurRadius(10);
//指定控件
ui->pushButton->setGraphicsEffect(m_pShadowEffect);
ui->lineEdit->setGraphicsEffect(m_pShadowEffect);
}
结果是只有lineEdit有阴影效果
原因是如果将effect安装在其他项目上,则setGraphicsEffect()将从项目中移除该效果并将其安装在该项目上。
来做个实验验证
void Dialog::on_pushButton_clicked()
{
// 设置阴影边框;
m_pShadowEffect = new QGraphicsDropShadowEffect(this);
// 阴影偏移
m_pShadowEffect->setOffset(5, 5);
// 阴影颜色;
m_pShadowEffect->setColor(Qt::lightGray);
// 阴影半径;
m_pShadowEffect->setBlurRadius(10);
ui->pushButton->setGraphicsEffect(m_pShadowEffect);
m_ID=0;
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateEffect()));
timer->start(2000);
}
void Dialog::updateEffect()
{
m_ID++;
switch (m_ID) {
case 1:
ui->lineEdit->setGraphicsEffect(m_pShadowEffect);
break;
case 2:
ui->label->setGraphicsEffect(m_pShadowEffect);
break;
case 3:
ui->radioButton->setGraphicsEffect(m_pShadowEffect);
break;
case 4:
ui->checkBox->setGraphicsEffect(m_pShadowEffect);
break;
case 5:
ui->pushButton->setGraphicsEffect(m_pShadowEffect);
break;
default:
break;
}
//重绘
update();
}
结果是控件的阴影在移动