Q3DBars 类
Q3DBars 类提供了渲染 3D 条形图的函数。 更多信息...
头文件 | #include <Q3DBars> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Graphs) target_link_libraries(mytarget PRIVATE Qt6::Graphs) |
qmake | QT += graphs |
继承自 | QAbstract3DGraph |
状态 | 技术预览 |
- 所有成员列表,包括继承成员
- Q3DBars 是 Qt Graphs C++ 3D 类 的一部分。
属性
|
|
公开函数
Q3DBars() | |
virtual | ~Q3DBars() override |
void | addAxis(QAbstract3DAxis *axis) |
void | addSeries(QBar3DSeries *series) |
QList<QAbstract3DAxis *> | axes() const |
QSizeF | barSeriesMargin() const |
QSizeF | barSpacing() const |
float | barThickness() const |
QCategory3DAxis * | columnAxis() const |
float | floorLevel() const |
void | insertSeries(int index, QBar3DSeries *series) |
bool | isBarSpacingRelative() const |
bool | isMultiSeriesUniform() const |
QBar3DSeries * | primarySeries() const |
void | releaseAxis(QAbstract3DAxis *axis) |
void | removeSeries(QBar3DSeries *series) |
QCategory3DAxis * | rowAxis() const |
QBar3DSeries * | selectedSeries() const |
QList<QBar3DSeries *> | seriesList() const |
void | setBarSeriesMargin(const QSizeF &margin) |
void | setBarSpacing(const QSizeF &spacing) |
void | setBarSpacingRelative(bool relative) |
void | setBarThickness(float thicknessRatio) |
void | setColumnAxis(QCategory3DAxis *axis) |
void | setFloorLevel(float level) |
void | setMultiSeriesUniform(bool uniform) |
void | setPrimarySeries(QBar3DSeries *series) |
void | setRowAxis(QCategory3DAxis *axis) |
void | setValueAxis(QValue3DAxis *axis) |
QValue3DAxis * | valueAxis() const |
信号
void | barSeriesMarginChanged(const QSizeF &margin) |
void | barSpacingChanged(const QSizeF &spacing) |
void | barSpacingRelativeChanged(bool relative) |
void | barThicknessChanged(float thicknessRatio) |
void | columnAxisChanged(QCategory3DAxis *axis) |
void | floorLevelChanged(float level) |
void | multiSeriesUniformChanged(bool uniform) |
void | primarySeriesChanged(QBar3DSeries *series) |
void | rowAxisChanged(QCategory3DAxis *axis) |
void | selectedSeriesChanged(QBar3DSeries *series) |
void | valueAxisChanged(QValue3DAxis *axis) |
详细描述
此类使开发者能够渲染3D柱状图并通过自由旋转场景来查看它们。旋转是通过按住鼠标右键并移动鼠标实现的,而缩放则是使用鼠标滚轮完成的。如果启用,则使用左鼠标按钮进行选择。可以通过点击鼠标滚轮将场景重置为默认摄像机视图。在触摸设备上,旋转是通过点击并移动实现的,选择是通过点击并保持实现的,缩放是通过捏合实现的。
如果未显式为Q3DBars设置轴,将创建无标签的默认临时轴。可以通过轴访问器修改这些默认轴,但一旦显式为某个方向设置任何轴,该方向的默认轴就会被销毁。
Q3DBars支持同时显示多个可见系列。所有系列不需要具有相同行数和列数。除非明确为行和列轴定义,否则从首先添加的系列中获取行和列标签。
如何构建一个最小的Q3DBars图
首先,构造一个Q3DBars的实例。在本例中,我们作为顶层窗口运行图表,我们需要清除默认设置的Qt::FramelessWindowHint
标志
构建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(); }
这就是这些几行代码所产生的结果
场景可以进行旋转、缩放,并且可以选择一个条形来查看其值,但在这个简化的代码示例中没有包含其他交互。您可以通过熟悉提供的示例来了解更多信息,如简单条形图。
另请参阅 Q3DScatter、Q3DSurface和Qt 图形 C++ 类 3D。
属性文档
barSeriesMargin : QSizeF
X 和 Z 维度中系列列之间的边距。合理的值在范围 [0,1) 内。
默认设置为 (0.0, 0.0)
。此属性能够显示不同系列并排显示的条形,但列之间有空间。
访问函数
QSizeF | barSeriesMargin() const |
void | setBarSeriesMargin(const QSizeF &margin) |
通知信号
void | barSeriesMarginChanged(const QSizeF &margin) |
另请参阅 barSpacing。
barSpacing : QSizeF
X 和 Z 维度中的条形间隔。
默认设置为 (1.0, 1.0)
。间隔受barSpacingRelative属性的影响。
访问函数
QSizeF | barSpacing() const |
void | setBarSpacing(const QSizeF &spacing) |
通知信号
void | barSpacingChanged(const QSizeF &spacing) |
另请参阅 barSpacingRelative、multiSeriesUniform和barSeriesMargin。
barSpacingRelative : bool
此属性确定间隔是绝对的还是相对于条形厚度的。
如果为true
,则0.0
的值表示条形并排放置,1.0
表示条形之间留有与条形厚度相同的空间,依此类推。预设为true
。
访问函数
bool | isBarSpacingRelative() const |
void | setBarSpacingRelative(bool relative) |
通知信号
void | barSpacingRelativeChanged(bool relative) |
barThickness : float
此属性持有 X 和 Z 维度之间的条形厚度比例。
值1.0
表示条形的宽度和深度相同,而0.5
则使它们深度是宽度的两倍。默认预设为1.0
。
访问函数
float | barThickness() const |
void | setBarThickness(float thicknessRatio) |
通知信号
void | barThicknessChanged(float thicknessRatio) |
columnAxis : QCategory3DAxis*
该属性持有附加到活动列的轴。
将活动列的轴设置为axis。隐式调用addAxis()将轴的所有权移交给此图。
如果axis为null,则创建一个临时默认轴,该轴没有标签。如果明确设置了另一个轴到同一方向,则此临时轴将被销毁。
访问函数
QCategory3DAxis * | columnAxis() const |
void | setColumnAxis(QCategory3DAxis *axis) |
通知信号
void | columnAxisChanged(QCategory3DAxis *axis) |
另请参阅 addAxis() 和 releaseAxis().
floorLevel : float
该属性持有条形图在Y轴数据坐标中的地面水平。
实际地面水平将受Y轴最小和最大值的限制。默认为零。
访问函数
float | floorLevel() const |
void | setFloorLevel(float level) |
通知信号
void | floorLevelChanged(float level) |
multiSeriesUniform : bool
该属性持有是否即使显示多个系列,也应对条形进行比例缩放,比例设定为一个系列条形。
如果设置为 true
,则 bar spacing 只会正确应用到X轴。默认预设为 false
。
访问函数
bool | isMultiSeriesUniform() const |
void | setMultiSeriesUniform(bool uniform) |
通知信号
void | multiSeriesUniformChanged(bool uniform) |
primarySeries : QBar3DSeries*
该属性持有图形的主系列。
将 series 设置为图形的主系列。主系列在标签未显式设置到轴上时确定行和列轴标签。
如果指定的系列尚未添加到图形中,则将其设置为主系列也将隐式将其添加到图形中。
如果主系列本身从图形中删除,则此属性将重置为默认值。
如果 series 为空,则此属性将重置为默认值。默认值为第一个添加的系列,如果没有添加系列则为零。
访问函数
QBar3DSeries * | primarySeries() const |
void | setPrimarySeries(QBar3DSeries *series) |
通知信号
void | primarySeriesChanged(QBar3DSeries *series) |
rowAxis : QCategory3DAxis*
该属性持有附加到活动行的轴。
将活动行的轴设置为 axis。隐式调用 addAxis() 将轴的所有权转移到此图形。
如果axis为null,则创建一个临时默认轴,该轴没有标签。如果明确设置了另一个轴到同一方向,则此临时轴将被销毁。
访问函数
QCategory3DAxis * | rowAxis() const |
void | setRowAxis(QCategory3DAxis *axis) |
通知信号
void | rowAxisChanged(QCategory3DAxis *axis) |
另请参阅 addAxis() 和 releaseAxis().
[只读]
selectedSeries : QBar3DSeries* const
该属性持有选中的系列或空值。
如果 selectionMode 设置了 SelectionMultiSeries
标志,则该属性持有拥有所选条形的系列。
访问函数
QBar3DSeries * | selectedSeries() const |
通知信号
void | selectedSeriesChanged(QBar3DSeries *series) |
valueAxis : QValue3DAxis*
将活动值轴(Y轴)设置为 axis。隐式调用 addAxis() 将 axis 的所有权转移到此图形。
如果 axis 为空,则创建一个无标签且范围自动调整的临时默认轴。如果显式将另一个轴设置到同一方向,则该临时轴将被销毁。
访问函数
QValue3DAxis * | valueAxis() const |
void | setValueAxis(QValue3DAxis *axis) |
通知信号
void | valueAxisChanged(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(),primarySeries和QAbstract3DGraph::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.的商标。所有其他商标均为其各自所有者的财产。