我尝试在QGraphicsDropShadowEffect
上设置QScrollBar
。此代码有效:
QGraphicsDropShadowEffect * dse = new QGraphicsDropShadowEffect();
dse->setBlurRadius(10);
dse->setColor(Qt::red);
dse->setOffset(0);
ui->verticalScrollBar->setGraphicsEffect(dse); // verticalScrollBar is `QScrollBar`.
但以下情况并非如此:
QGraphicsDropShadowEffect * dse = new QGraphicsDropShadowEffect();
dse->setBlurRadius(10);
dse->setColor(Qt::red);
dse->setOffset(0);
ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
ui->scrollArea->verticalScrollBar()->setGraphicsEffect(dse);
在第二个示例代码中,我尝试在QScrollArea
内的滑块上设置效果,但它不适用于它。但是,它可以通过scrollArea
应用于整个ui->scrollArea->setGraphicsEffect(dse)
。我做错了什么?
答案 0 :(得分:0)
我遇到的问题是由QScrollBar
的父窗口小部件引起的。因此,QScrollArea
具有项目区域和滚动条区域。滚动条区域包含QWidget
和QScrollBar
实际放置在这些QWidgets
上的内容。因此,为了完成这项工作,我实际上必须为父窗口小部件设置效果:
for(auto *child : ui->scrollArea->findChildren<QScrollBar*>()) {
if (child->orientation() == Qt::Vertical) {
auto * dse = new QGraphicsDropShadowEffect();
dse->setBlurRadius(10);
dse->setColor(Qt::red);
dse->setXOffset(-3);
dse->setYOffset(0);
child->parentWidget()->setGraphicsEffect(dse);
qDebug() << child->metaObject()->className(); // QScrollBar
qDebug() << child->parentWidget()->metaObject()->className(); // QWidget
}
}