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

时间:2015-11-12 19:31:35

标签: qt qgraphicsscene

在我的QGraphicsScene中,我想将背景画笔设置为默认的小部件背景 - 但我无法获得它。

有点像我的QGraphicsView

setBackgroundRole(QPalette::Window);

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

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

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

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

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

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

在现场,这将有效...

setBackgroundBrush(Qt::red);

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

2 个答案:

答案 0 :(得分:2)

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

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

但我认为你应该在QGraphicsView小部件中设置背景颜色。您可以通过更改样式表来实现。类似的东西:

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

设置透明背景也有效。

答案 1 :(得分:2)

您可以使用静态方法style()检索QApplication的当前样式。从那里,您可以使用standardPalette()访问QStyle的标准调色板。使用QPalette的brush方法获取给定ColorRole的画笔。总而言之,你得到......

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

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