c++ 使用Qt绘制两个柱状图,图1为十个人的身高数据,图2为另外十个人的身高数据,身高大于180的柱体为红色,低于160的柱体为绿色,其余柱体为蓝色,两个柱状图上下排列
时间: 2024-09-26 17:13:49 浏览: 51
在C++中使用Qt库绘制这样的双柱状图,你可以按照以下步骤操作:
首先,你需要确保已经安装了Qt库并配置了相应的开发环境。然后,你可以使用QChart、QBarSet、QValueAxis以及QGraphicsView等组件来创建图形。
1. 创建`mainwindow.ui`文件,这是Qt Designer生成的用户界面设计文件,用于设置窗口布局和控件。
2. 在`.ui`文件中添加两个垂直布局,分别放置两个QChart对象。
```xml
<!-- ... -->
<GridLayout>
<Widget name="chart1" class="QChart">
<!-- ... -->
</Widget>
<Widget name="chart2" class="QChart">
<!-- ... -->
</Widget>
</GridLayout>
<!-- ... -->
```
3. 在`mainwindow.cpp`文件中,设置窗口样式并将数据绑定到图表上:
```cpp
#include <QApplication>
#include "mainwindow.h"
#include <QChart>
#include <QColumnDataSource>
#include <QValueAxis>
#include <QBarSet>
#include <QPen>
#include <QColor>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
// 初始化窗口
// ...
// 图表1的数据处理
QVector<int> heights1 = {/* 10个人的身高数据 */};
QBarSet* barSet1 = new QBarSet("Heights");
for (int height : heights1) {
if (height > 180) {
barSet1->append(height, QColor(Qt::red));
} else if (height < 160) {
barSet1->append(height, QColor(Qt::green));
} else {
barSet1->append(height, QColor(Qt::blue));
}
}
// 图表1创建
QChart *chart1 = new QChart();
chart1->addSeries(barSet1);
chart1->setTitle(QStringLiteral("Person Heights"));
chart1->setAnimationOptions(QChart::SeriesAnimations);
// 设置轴和范围
QValueAxis *axis1 = new QValueAxis;
axis1->setRange(0, *barSet1->max());
chart1->addAxis(axis1, Qt::AlignBottom);
chart1->replot();
// 添加到UI
QVBoxLayout *chartLayout1 = new QVBoxLayout;
chartLayout1->addWidget(chart1);
QWidget *chartWidget1 = new QWidget(this);
chartWidget1->setLayout(chartLayout1);
layout()->addWidget(chartWidget1);
// 类似地,为图表2重复以上步骤,替换数据和颜色条件
// ...
}
// 主函数
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.show();
return app.exec();
}
```
阅读全文