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

Posted

技术标签:

【中文标题】在 QGraphicsScene 上为小部件设置系统背景的背景颜色【英文标题】:Setting background color of system background for widgets, on a QGraphicsScene 【发布时间】:2015-11-12 19:31:35 【问题描述】:

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

有点喜欢,对于我的QGraphicsView

setBackgroundRole(QPalette::Window);

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

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

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

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

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

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

在现场,这将起作用......

setBackgroundBrush(Qt::red);

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案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));

设置透明背景也可以。

【讨论】:

我之前尝试在视图中设置背景颜色,但我什么也没看到... 你到底看到了什么?它是否保持默认颜色 - 白色? 是的,无论我将其更改为什么,它都会保持白色 - 我更新了问题以解释这种奇怪的行为。即使我将场景设置为透明。场景背景画笔可以工作 - 但必须创建一个无用的对象,并为其包含 qwidget 以获取颜色,似乎开销很大 我刚想尝试setBackgroundBrush(views().at(0)->palette().background().color());,但场景是在添加到视图之前创建的... 好吧,我作弊了——我让调用者设置了场景画笔。系统颜色不可用是没有意义的……但是……哦,好吧。

以上是关于在 QGraphicsScene 上为小部件设置系统背景的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 的主小部件中为小部件设置背景颜色?

Flutter:在从小部件树中删除时或在其生命周期结束时为小部件设置动画?

如何在 Android Studio 中为小部件设置不高度?

在 returnPressed 时从 QGraphicsScene 中删除 QLineEdit 代理小部件

将 onClickListener 设置为小部件中的按钮 [重复]

是否可以为小部件设置标准样式?