在 QGraphicsScene 上为小部件设置系统背景的背景颜色

Setting background color of system background for widgets, on a QGraphicsScene

在我的 QGraphicsScene 中,我想将背景画笔设置为默认的小部件背景 - 但我做不到。

有点像,为了我的 QGraphicsView

setBackgroundRole(QPalette::Window);

setBackgroundBrush(palette().background().color());

(但是设置这个我看不到任何事情发生)...如果我将视图颜色设置为鲜红色,我也看不到任何事情发生)。

所以我想我必须直接在 QGraphicsScene 上设置颜色。

对于 QGraphicsScene 我正在尝试各种组合,例如

setBackgroundBrush(QPalette::color(QPalette::Background));

什么都不会建立,似乎我需要一个对象(?一个小部件?) - 但我的场景可能没有一个小部件父...我想要的只是一个默认调色板,我认为会有一个通用的无需小部件即可获得该颜色的方法?

在现场,这行得通...

setBackgroundBrush(Qt::red);

不知道为什么视图不显示颜色(即使我在视图上设置红色刷子和场景透明)。

创建一个临时小部件实例只是为了访问其调色板并获取背景颜色:

QColor bgColor = QWidget().palette().background().color();

但我认为您应该在 QGraphicsView 小部件中设置背景颜色。您可以通过更改其样式表来做到这一点。类似于:

QColor bg = ui->graphicsView->palette().background().color();
ui->graphicsView->setStyleSheet(QString("background-color:") + bg.name(QColor::HexArgb));

设置透明背景也可以。

您可以使用静态方法style() 检索QApplication 的当前样式。从那里,您可以使用 standardPalette() 访问 QStyle 的标准调色板。使用 QPalette 的 brush 方法为给定的 ColorRole 获取画笔。把它们放在一起你会得到...

QApplication::style()->standardPalette().brush(QPalette::Background)

这可能不是您期待的颜色。查看 http://doc.qt.io/qt-4.8/qpalette.html 上的文档,并尝试不同的 ColorRole 值,直到找到您要查找的内容。