Полный и минимальный пример отсутствует, но, возможно, вы только что установили атрибуты на неправильные свойства.Если вы наследуете QWidget вместо QDialog , это также может быть причиной странного поведения, которое вы испытываете.Например, при реализации какого-либо настраиваемого диалогового окна на основе представления лучше предоставить центральный контейнер по умолчанию с некоторым макетом и размещать стили в контейнере, а не в диалоге, чтобы избежать проблем, связанных с ОС или Qt.Кроме того, желательно, чтобы вы унаследовали QDialog вместо QWidget , если вы хотите, чтобы пользовательский диалог был введен, так как Qt выполняет много работы за кулисами, связанной с позиционированием, настройкой модальности искоро.Таким образом, стандартное поведение Qt должно быть предпочтительным.
Теперь для примера, посмотрите его ниже:
// ShadowedDialog.h
#pragma once
#include <QDialog>
class ShadowedDialog
: public QDialog
{
Q_OBJECT
public:
ShadowedDialog(QWidget* parent = nullptr);
virtual ~ShadowedDialog();
};
// ShadowedDialog.cpp
#include <QGraphicsDropShadowEffect>
#include <QHBoxLayout>
#include "ShadowedDialog.h"
ShadowedDialog::ShadowedDialog(QWidget* parent)
: QDialog(parent)
{
// Set your own window flags, but don't forget to keep the default ones for the dialog.
this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
// Translucent background is also needed in order for the shadow to work.
this->setAttribute(Qt::WA_TranslucentBackground, true);
// You would never need to do that, but this will make sure example will be visible enough.
this->setFixedSize(400, 400);
// Then, UI is setup.
auto container = new QWidget();
container->setObjectName("container");
container->setStyleSheet("#container{background-color:#ffffff;border:1px solid #000000;}");
auto layout = new QHBoxLayout();
layout->addWidget(container);
this->setLayout(layout);
// And finally, QGraphicsDropShadowEffect is put with red drop shadow.
auto effect = new QGraphicsDropShadowEffect();
effect->setBlurRadius(5);
effect->setXOffset(5);
effect->setYOffset(5);
effect->setColor(QColor("#ff0000"));
container->setGraphicsEffect(effect);
}
ShadowedDialog::~ShadowedDialog()
{
}
Пример довольно прост и в основном делает следующее: 1. Он устанавливает некоторыеконтейнер с белым фоном с черной каймой.2. Затем устанавливается QGraphicsDropShadowEffect .И, возможно, именно эта тень вам нужна в вашем диалоговом окне.
Результат выглядит следующим образом (проверено в Windows 7):
Как правило, здесь главное установить стили для дочерних элементов диалога, а не для самого диалога.Надеемся, что приведенный пример прояснил вам ситуацию, и вы сможете достичь того, чего хотите.