Q3DBars 类

Q3DBars 类提供了渲染 3D 条形图的函数。 更多信息...

头文件 #include <Q3DBars>
CMakefind_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmakeQT += graphs
继承自 QAbstract3DGraph
状态技术预览

属性

公开函数

Q3DBars()
virtual~Q3DBars() override
voidaddAxis(QAbstract3DAxis *axis)
voidaddSeries(QBar3DSeries *series)
QList<QAbstract3DAxis *>axes() const
QSizeFbarSeriesMargin() const
QSizeFbarSpacing() const
floatbarThickness() const
QCategory3DAxis *columnAxis() const
floatfloorLevel() const
voidinsertSeries(int index, QBar3DSeries *series)
boolisBarSpacingRelative() const
boolisMultiSeriesUniform() const
QBar3DSeries *primarySeries() const
voidreleaseAxis(QAbstract3DAxis *axis)
voidremoveSeries(QBar3DSeries *series)
QCategory3DAxis *rowAxis() const
QBar3DSeries *selectedSeries() const
QList<QBar3DSeries *>seriesList() const
voidsetBarSeriesMargin(const QSizeF &margin)
voidsetBarSpacing(const QSizeF &spacing)
voidsetBarSpacingRelative(bool relative)
voidsetBarThickness(float thicknessRatio)
voidsetColumnAxis(QCategory3DAxis *axis)
voidsetFloorLevel(float level)
voidsetMultiSeriesUniform(bool uniform)
voidsetPrimarySeries(QBar3DSeries *series)
voidsetRowAxis(QCategory3DAxis *axis)
voidsetValueAxis(QValue3DAxis *axis)
QValue3DAxis *valueAxis() const

信号

voidbarSeriesMarginChanged(const QSizeF &margin)
voidbarSpacingChanged(const QSizeF &spacing)
voidbarSpacingRelativeChanged(bool relative)
voidbarThicknessChanged(float thicknessRatio)
voidcolumnAxisChanged(QCategory3DAxis *axis)
voidfloorLevelChanged(float level)
voidmultiSeriesUniformChanged(bool uniform)
voidprimarySeriesChanged(QBar3DSeries *series)
voidrowAxisChanged(QCategory3DAxis *axis)
voidselectedSeriesChanged(QBar3DSeries *series)
voidvalueAxisChanged(QValue3DAxis *axis)

详细描述

此类使开发者能够渲染3D柱状图并通过自由旋转场景来查看它们。旋转是通过按住鼠标右键并移动鼠标实现的,而缩放则是使用鼠标滚轮完成的。如果启用,则使用左鼠标按钮进行选择。可以通过点击鼠标滚轮将场景重置为默认摄像机视图。在触摸设备上,旋转是通过点击并移动实现的,选择是通过点击并保持实现的,缩放是通过捏合实现的。

如果未显式为Q3DBars设置轴,将创建无标签的默认临时轴。可以通过轴访问器修改这些默认轴,但一旦显式为某个方向设置任何轴,该方向的默认轴就会被销毁。

Q3DBars支持同时显示多个可见系列。所有系列不需要具有相同行数和列数。除非明确为行和列轴定义,否则从首先添加的系列中获取行和列标签。

如何构建一个最小的Q3DBars图

首先,构造一个Q3DBars的实例。在本例中,我们作为顶层窗口运行图表,我们需要清除默认设置的Qt::FramelessWindowHint标志

Q3DBars bars;
bars.setMinimumSize(QSize(256, 256));

构建Q3DBars之后,您可以通过修改行和列轴的取值范围来设置数据窗口。这不是必需的,因为数据窗口将默认显示系列中的所有数据。如果数据量很大,通常只显示其中的一部分会更好。例如,让我们将数据窗口设置为显示前五行和列

bars.rowAxis()->setRange(0, 4);
bars.columnAxis()->setRange(0, 4);

现在,Q3DBars准备好接收要渲染的数据。创建一个包含5个值的单行系列

QBar3DSeries *series = new QBar3DSeries;
QBarDataRow data;
data << QBarDataItem(1.0f) << QBarDataItem(3.0f) << QBarDataItem(7.5f) << QBarDataItem(5.0f)
     << QBarDataItem(2.2f);
series->dataProxy()->addRow(data);
bars.addSeries(series);

注意:我们设置了5 x 5的数据窗口,但我们只添加了一行数据。这是可以的;其余的行将是空白的。

最后,您需要将其设置为可见

bars.show();

创建并显示此图表所需的所有完整代码是

#include <QtGraphs>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    Q3DBars bars;
    bars.setMinimumSize(QSize(256, 256));
    bars.rowAxis()->setRange(0, 4);
    bars.columnAxis()->setRange(0, 4);
    QBar3DSeries *series = new QBar3DSeries;
    QBarDataRow data;
    data << QBarDataItem(1.0f) << QBarDataItem(3.0f) << QBarDataItem(7.5f) << QBarDataItem(5.0f)
         << QBarDataItem(2.2f);
    series->dataProxy()->addRow(data);
    bars.addSeries(series);
    bars.show();

    return app.exec();
}

这就是这些几行代码所产生的结果

场景可以进行旋转、缩放,并且可以选择一个条形来查看其值,但在这个简化的代码示例中没有包含其他交互。您可以通过熟悉提供的示例来了解更多信息,如简单条形图

另请参阅 Q3DScatterQ3DSurfaceQt 图形 C++ 类 3D

属性文档

barSeriesMargin : QSizeF

X 和 Z 维度中系列列之间的边距。合理的值在范围 [0,1) 内。

默认设置为 (0.0, 0.0)。此属性能够显示不同系列并排显示的条形,但列之间有空间。

访问函数

QSizeFbarSeriesMargin() const
voidsetBarSeriesMargin(const QSizeF &margin)

通知信号

voidbarSeriesMarginChanged(const QSizeF &margin)

另请参阅 barSpacing

barSpacing : QSizeF

X 和 Z 维度中的条形间隔。

默认设置为 (1.0, 1.0)。间隔受barSpacingRelative属性的影响。

访问函数

QSizeFbarSpacing() const
voidsetBarSpacing(const QSizeF &spacing)

通知信号

voidbarSpacingChanged(const QSizeF &spacing)

另请参阅 barSpacingRelativemultiSeriesUniformbarSeriesMargin

barSpacingRelative : bool

此属性确定间隔是绝对的还是相对于条形厚度的。

如果为true,则0.0的值表示条形并排放置,1.0表示条形之间留有与条形厚度相同的空间,依此类推。预设为true

访问函数

boolisBarSpacingRelative() const
voidsetBarSpacingRelative(bool relative)

通知信号

voidbarSpacingRelativeChanged(bool relative)

barThickness : float

此属性持有 X 和 Z 维度之间的条形厚度比例。

1.0表示条形的宽度和深度相同,而0.5则使它们深度是宽度的两倍。默认预设为1.0

访问函数

floatbarThickness() const
voidsetBarThickness(float thicknessRatio)

通知信号

voidbarThicknessChanged(float thicknessRatio)

columnAxis : QCategory3DAxis*

该属性持有附加到活动列的轴。

将活动列的轴设置为axis。隐式调用addAxis()将轴的所有权移交给此图。

如果axis为null,则创建一个临时默认轴,该轴没有标签。如果明确设置了另一个轴到同一方向,则此临时轴将被销毁。

访问函数

QCategory3DAxis *columnAxis() const
voidsetColumnAxis(QCategory3DAxis *axis)

通知信号

voidcolumnAxisChanged(QCategory3DAxis *axis)

另请参阅 addAxis() 和 releaseAxis().

floorLevel : float

该属性持有条形图在Y轴数据坐标中的地面水平。

实际地面水平将受Y轴最小和最大值的限制。默认为零。

访问函数

floatfloorLevel() const
voidsetFloorLevel(float level)

通知信号

voidfloorLevelChanged(float level)

multiSeriesUniform : bool

该属性持有是否即使显示多个系列,也应对条形进行比例缩放,比例设定为一个系列条形。

如果设置为 true,则 bar spacing 只会正确应用到X轴。默认预设为 false

访问函数

boolisMultiSeriesUniform() const
voidsetMultiSeriesUniform(bool uniform)

通知信号

voidmultiSeriesUniformChanged(bool uniform)

primarySeries : QBar3DSeries*

该属性持有图形的主系列。

series 设置为图形的主系列。主系列在标签未显式设置到轴上时确定行和列轴标签。

如果指定的系列尚未添加到图形中,则将其设置为主系列也将隐式将其添加到图形中。

如果主系列本身从图形中删除,则此属性将重置为默认值。

如果 series 为空,则此属性将重置为默认值。默认值为第一个添加的系列,如果没有添加系列则为零。

访问函数

QBar3DSeries *primarySeries() const
voidsetPrimarySeries(QBar3DSeries *series)

通知信号

voidprimarySeriesChanged(QBar3DSeries *series)

rowAxis : QCategory3DAxis*

该属性持有附加到活动行的轴。

将活动行的轴设置为 axis。隐式调用 addAxis() 将轴的所有权转移到此图形。

如果axis为null,则创建一个临时默认轴,该轴没有标签。如果明确设置了另一个轴到同一方向,则此临时轴将被销毁。

访问函数

QCategory3DAxis *rowAxis() const
voidsetRowAxis(QCategory3DAxis *axis)

通知信号

voidrowAxisChanged(QCategory3DAxis *axis)

另请参阅 addAxis() 和 releaseAxis().

[只读] selectedSeries : QBar3DSeries* const

该属性持有选中的系列或空值。

如果 selectionMode 设置了 SelectionMultiSeries 标志,则该属性持有拥有所选条形的系列。

访问函数

QBar3DSeries *selectedSeries() const

通知信号

voidselectedSeriesChanged(QBar3DSeries *series)

valueAxis : QValue3DAxis*

将活动值轴(Y轴)设置为 axis。隐式调用 addAxis() 将 axis 的所有权转移到此图形。

如果 axis 为空,则创建一个无标签且范围自动调整的临时默认轴。如果显式将另一个轴设置到同一方向,则该临时轴将被销毁。

访问函数

QValue3DAxis *valueAxis() const
voidsetValueAxis(QValue3DAxis *axis)

通知信号

voidvalueAxisChanged(QValue3DAxis *axis)

另请参阅 addAxis() 和 releaseAxis().

成员函数文档

Q3DBars::Q3DBars()

构建一个新的3D柱状图。

[重写 虚拟 noexcept] Q3DBars::~Q3DBars()

销毁3D柱状图。

void Q3DBars::addAxis(QAbstract3DAxis *axis)

axis添加到图中。通过addAxis添加的轴尚未开始使用,addAxis只是用于将axis的所有权赋予图。该axis必须不为空或添加到另一个图中。

另请参阅releaseAxis(),setValueAxis(),setRowAxis()和setColumnAxis()。

void Q3DBars::addSeries(QBar3DSeries *series)

series添加到图中。一个图可以包含多个系列,但只有一个轴集,因此所有系列的行和列必须匹配,以便可视化的数据有意义。如果图有多个可见系列,并且未明确为轴设置标签,则只有主要系列将在轴上生成行标签或列标签。如果新添加的系列已指定选中柱,则会将其突出显示,并清除任何现有选择。只能有一个添加的系列可以有活动选择。

另请参阅seriesList(),primarySeriesQAbstract3DGraph::hasSeries()。

QList<QAbstract3DAxis *> Q3DBars::axes() const

返回所有添加轴的列表。

另请参阅addAxis()。

void Q3DBars::insertSeries(int index, QBar3DSeries *series)

在系列列表中将series插入到位置index。如果series已添加到列表中,它将被移动到新index的位置。

注意:当将系列移动到其旧索引之后的新索引时,列表中的新位置是假设系列仍然在其旧索引中计算,因此实际索引实际上是index减一的值。

另请参阅addSeries(),seriesList()和QAbstract3DGraph::hasSeries()。

void Q3DBars::releaseAxis(QAbstract3DAxis *axis)

如果在图中添加该axis并将其释放回调用人,则释放axis的所有权。如果释放的axis正在使用中,则将创建并设置新默认轴的活动状态。

如果默认轴已释放并在稍后再次添加,它将像任何其他轴一样行为。

另请参阅 addAxis(),setValueAxis(),setRowAxis() 和 setColumnAxis()。

void Q3DBars::removeSeries(QBar3DSeries *series)

从图形中删除 系列

另请参阅 QAbstract3DGraph::hasSeries()。

QList<QBar3DSeries *> Q3DBars::seriesList() const

返回添加到此图形的系列列表。

另请参阅 QAbstract3DGraph::hasSeries()。

© 2024 The Qt Company Ltd.本文件中包含的文档贡献各自拥有其版权。提供的文档受自由软件基金会发布的《GNU自由文档许可证第1.3版》条款许可。Qt和相应标志是芬兰和/或世界其他地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。