如何从QChartView或QChart中去除边距

22

所有的Qt Charts似乎都有边距和圆角。

带有红色标记边框的示例图片

如何同时去掉它们?

我希望白色区域填满整个对话框。我在Qt文档中找不到任何信息。我发现了一个没有这种间距的示例的截图。但我找不到禁用它的代码。

我的初始化代码如下:

QPieSeries *series = new QPieSeries();
series->append("Jane", 1);
series->append("Joe", 2);
series->append("Andy", 3);
series->append("Barbara", 4);
series->append("Axel", 5);

QChart *chart = new QChart();
chart->addSeries(series);

QChartView *chartView = new QChartView(chart);
chartView->setBackgroundBrush(Qt::red);
chartView->setRenderHint(QPainter::Antialiasing);

QMainWindow window;
window.setCentralWidget(chartView);
window.resize(400, 300);
window.show();

红色部分是 QChartView 的一部分还是 QChart 的一部分?您可以尝试使用 ui->pieChartView->setBackgroundBrush(Qt::white)m_pieChart->setMargins(QMargins()) - G.M.
6
你应该这样做:m_pieChart->layout()->setContentsMargins(0, 0, 0, 0); - Devopia
@Devopia:在这个例子中,m_pieChart现在被改为了chart。你的代码可以运行!但是我仍然有圆角边框。如果你知道如何去除它们,我会接受你的答案(如果你写一个的话)。 - feedc0de
5
当然 :) 类似这样:chart->setBackgroundRoundness(0); 可以翻译为:设置图表背景的圆角程度为0。 - Devopia
@Devopia,你真的应该回答这个问题。你完美地解决了我的问题,我想用一个答案来关闭这个问题! - feedc0de
@Devopia 谢谢,那些边距让我疯了。我尝试了100多种其他方法,但从来没有想过要通过layout()来解决。 - Jason C
2个回答

35

Devopia在评论中回答了这个问题!

在我上面的例子中,我需要以下两行代码完全删除红色部分:

chart->layout()->setContentsMargins(0, 0, 0, 0);
chart->setBackgroundRoundness(0);

我曾经使用各种绕路和绕过的方法来摆脱那个边距。不错! - karlphillip
1
我还成功地使用 chart->setMargins({0, 0, 0, 0}); 去除了图表周围的一些额外空间。 - Ruslan
不适用于 QML:https://dev59.com/questions/tZ3ha4cB1Zd3GeqPX6pP#60357846 - Aleksey Kontsevich

5

在Qt 5.11中,这将不起作用,因为layout()方法是常量(继承自QGraphicsWidget):

QGraphicsLayout *QGraphicsWidget::layout() const

此外,由于QGraphicsLayout是一个基类,因此无法复制它。对我而言,以下代码有效:
chart->setMargins(QMargins(0,0,0,0));

1
如果layout()方法返回一个非const的QGraphicsLayout指针,为什么将其设置为const会有问题呢?此外,chart->setMargins()与chart->layout()->setContentsMargins()并不完全相同。用CSS术语来说,前者设置图表的填充,而后者设置其边距。 - Joseph Artsimovich
chart->layout()->setContentsMargins(0, 0, 0, 0); 这行代码在 Qt 5 中很有效。此外,Joseph Artsimovich 完美地描述了您肯定遇到的问题。 - Patapoom
这不是正确的。1)该方法被声明为“const”意味着它不会修改“QGraphicsWidget”,但返回的布局本身并非“const”,您可以随意使用它;2)setMargins设置圆角边框内部的边距;而layout()->setContentsMargins是从边框到窗口小部件边缘的边距;它们并不完全相同。 - Jason C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接