如何使用QGraphicsScene :: setStyle()?

时间:2016-06-01 07:18:32

标签: c++ qt qtstylesheets

我正在使用QGraphicsProxyWidgetQWidget嵌入QGraphicsScene。问题在于绘制这些小部件的样式。 来自documentation

  

顶级项目的样式默认为QGraphicsScene :: style。顶级窗口小部件的样式默认为QApplication :: style

所以,我必须将样式设置为QGraphicsScene。现在,我正在使用QWidget::setStyleSheet来设置基于CSS(QSS)的自定义样式。

我的问题是:我如何使用QGraphicsScene::setStyle,这需要QStyle的实例,因为我还没有?有人可以使用它发布示例并设置样式表启用的样式吗?

我已尝试QStyleFactory::create,但无法创建QStyleSheetStyle的实例。

1 个答案:

答案 0 :(得分:1)

由于您还没有QStyle的实例,因此QGraphicsScene使用的默认样式为QApplication::style(),正如documentation中所述。

  

场景的样式默认为QApplication :: style(),并作为   默认为场景中的所有QGraphicsWidget项目。

这句话的第二部分暗示您可以在场景中自定义小部件(就像您现在使用QWidget::setStyleSheet一样)。您可以在将样式表添加到场景之前为其指定样式表,它将在添加后保留其样式。

QGraphicsScene不可能,因为它没有这样的功能。 应使用QPalette定义其样式,并通过QApplication::setPalette设置。请记住,QGraphicsScene还具有setBackgroundBrushsetForegroundBrush等功能。

QPalette pal;
pal.setColor(QPalette::Base, QColor(255, 0, 0));

QApplication::setPalette(pal);

QGraphicsScene* scene = new QGraphicsScene(400,400,400,400);
scene->setPalette(pal);

QGraphicsView* view = new QGraphicsView(scene);
view->show();