Как поместить тень в бескаркасное окно в Qt
Я пытаюсь создать бескаркасное окно, которое имеет тень под ним.Когда мы создаем окно без границ с Qt:: FramelessWindowHint флаг он не содержит тени. Но мы можем легко поместить тени в дочерние виджеты, создав QGraphicsDropShadowEffect
3 ответов
вы можете сделать это, используя этот простой хак:
добавьте "QWidget" (скажем, виджет) в Главное окно и переместите все, что находится в главном окне, в виджет. После этого:
setAttribute(Qt::WA_TranslucentBackground); //enable MainWindow to be transparent
QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
ui->widget->setGraphicsEffect(effect);
Это, кажется, работает для меня. См.:
я следовал точно инструкциям, которые были даны zeFree (используя Qt/C++), и моя тень действительно была щелчком мыши (используя элементарную ОС Freya-я не знаю, есть ли другое поведение между ним и Ubuntu, OX или Windows)... Я не могу понять, почему твой не был.--3-->
единственная разница заключается в том, что я сделал поля родительского окна и радиус размытия больше и удалил смещение тени.
вот мой фрагмент:
void addDialogShadow(QWidget *target) {
target->window()->setAttribute(Qt::WA_TranslucentBackground);
target->window()->layout()->setMargin(50);
QGraphicsDropShadowEffect* ef = new QGraphicsDropShadowEffect;
ef->setBlurRadius(50);
ef->setOffset(0);
target->setGraphicsEffect(ef);
}
изменить:
Нет, мой windows не была clickthrough (я думаю, что спал, когда писал это). Действительно даже Qt::WA_TransparentForMouseEvent
атрибут в моем экземпляре QDialog не работает. Шлифуя информацию в Интернете, я обнаружил, что сделать эту работу намного сложнее, чем я думал.