#include "barcharteg.h"
#include <qtime>
const int rows = 4;
const int cols = 3;
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
BarChartEg::BarChartEg(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
InitTableWidget();
Init1();
Init2();
Init3();
}
BarChartEg::~BarChartEg()
{
}
//初始化表格
void BarChartEg::InitTableWidget()
{
ui.tableWidget->setRowCount(rows);
ui.tableWidget->setColumnCount(cols);
QStringList headerList;
headerList << "CNR1" << "CNR2" << "CNR3";
ui.tableWidget->setHorizontalHeaderLabels(headerList);
}
//初始化一般柱状图
void BarChartEg::Init1()
{
//1.准备QChartView对象,用来显示chart
view1 = new QChartView(ui.widget);
InitChartView(view1, ui.widget);
//2.准备QChart对象,用来绘图
chart1 = new QChart();
InitChart(chart1);
//3.将chart添加到chartView上
view1->setChart(chart1);
//4.设置坐标轴
InitAxis1();
//5.准备barSeries对象,用于存储数据
barSeries1 = new QBarSeries(this);
InitBarSeries1(barSeries1);
//6.准备barSet数据集,每组有几个柱形图就需要几个barset
cnr1_1 = new QBarSet("CNR1");
cnr1_2 = new QBarSet("CNR2");
cnr1_3 = new QBarSet("CNR3");
InitBarSet(cnr1_1, cnr1_2, cnr1_3);
//7.为序列barSeries添加数据集barSet
QList<QBarSet *> barSetList;
barSetList << cnr1_1 << cnr1_2 << cnr1_3;
barSeries1->append(barSetList);
//8.将序列barSeries添加到chart上
chart1->addSeries(barSeries1);
//9.将坐标轴添加到chart上,并指定序列
chart1->setAxisX(xAxis1, barSeries1);
chart1->setAxisY(yAxis1, barSeries1);
}
//初始化堆叠柱状图
void BarChartEg::Init2()
{
//1.准备QChartView对象,用来显示chart
view2 = new QChartView(ui.widget_2);
InitChartView(view2, ui.widget_2);
//2.准备QChart对象,用来绘图
chart2 = new QChart();
InitChart(chart2);
//3.将chart添加到chartView上
view2->setChart(chart2);
//4.设置坐标轴
InitAxis2();
//5.准备barSeries对象,用于存储数据
stackedSeries2 = new QStackedBarSeries(this);
InitBarSeries2(stackedSeries2);
//6.准备barSet数据集,每组有几个柱形图就需要几个barset
cnr2_1 = new QBarSet("CNR1");
cnr2_2 = new QBarSet("CNR2");
cnr2_3 = new QBarSet("CNR3");
InitBarSet(cnr2_1, cnr2_2, cnr2_3);
//7.为序列barSeries添加数据集barSet
QList<QBarSet *> barSetList;
barSetList << cnr2_1 << cnr2_2 << cnr2_3;
stackedSeries2->append(barSetList);
//8.将序列barSeries添加到chart上
chart2->addSeries(stackedSeries2);
//9.将坐标轴添加到chart上,并指定序列
chart2->setAxisX(xAxis2, stackedSeries2);
chart2->setAxisY(yAxis2, stackedSeries2);
}
//初始化百分比柱状图
void BarChartEg::Init3()
{
//1.准备QChartView对象,用来显示chart
view3 = new QChartView(ui.widget_3);
InitChartView(view3, ui.widget_3);
//2.准备QChart对象,用来绘图
chart3 = new QChart();
InitChart(chart3);
//3.将chart添加到chartView上
view3->setChart(chart3);
//4.设置坐标轴
InitAxis3();
//5.准备barSeries对象,用于存储数据
percentSeries3 = new QPercentBarSeries(this);
InitBarSeries3(percentSeries3);
//6.准备barSet数据集,每组有几个柱形图就需要几个barset
cnr3_1 = new QBarSet("CNR1");
cnr3_2 = new QBarSet("CNR2");
cnr3_3 = new QBarSet("CNR3");
InitBarSet(cnr3_1, cnr3_2, cnr3_3);
//7.为序列barSeries添加数据集barSet
QList<QBarSet *> barSetList;
barSetList << cnr3_1 << cnr3_2 << cnr3_3;
percentSeries3->append(barSetList);
//8.将序列barSeries添加到chart上
chart3->addSeries(percentSeries3);
//9.将坐标轴添加到chart上,并指定序列
chart3->setAxisX(xAxis3, percentSeries3);
chart3->setAxisY(yAxis3, percentSeries3);
}
//设置QChartView布局
void BarChartEg::InitChartView(QChartView *chartView, QWidget *widget)
{
chartView->setBackgroundBrush(QBrush(Qt::white));
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->setContentsMargins(0, 0, 0, 0);
hLayout->addWidget(chartView);
widget->setLayout(hLayout);
}
//设置chart
void BarChartEg::InitChart(QChart *chart)
{
chart->layout()->setContentsMargins(5, 0, 5, 5);
chart->setMargins(QMargins(1, 0, 1, 1));
chart->setBackgroundRoundness(0);
chart->setTheme(QChart::ChartThemeBlueCerulean);
}
//设置数据集外观
void BarChartEg::InitBarSet(QBarSet *set1, QBarSet *set2, QBarSet *set3)
{
//设置数据集标签字体
QFont font("宋体", 8, 0);
font.setBold(true);
set1->setLabelFont(font);
set2->setLabelFont(font);
set3->setLabelFont(font);
//设置数据集标签颜色
set1->setLabelColor(QColor(255, 0, 0));
set2->setLabelColor(QColor(255, 0, 0));
set3->setLabelColor(QColor(255, 0, 0));
}
//设置序列标签和宽度
void BarChartEg::InitBarSeries1(QBarSeries *barSeries)
{
//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsCenter);//设置在柱形图内部中间
//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);//设置在柱形图内部顶端
//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideBase);//设置在柱形图内部下端
barSeries->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);//设置在柱形图外部上端
barSeries->setLabelsVisible(true);
barSeries->setBarWidth(0.5);
}
void BarChartEg::InitBarSeries2(QStackedBarSeries *barSeries)
{
barSeries->setLabelsPosition(QAbstractBarSeries::LabelsCenter);//设置在柱形图外部上端
barSeries->setLabelsVisible(true);
barSeries->setBarWidth(0.5);
}
void BarChartEg::InitBarSeries3(QPercentBarSeries *barSeries)
{
barSeries->setLabelsPosition(QAbstractBarSeries::LabelsCenter);//设置在柱形图外部上端
barSeries->setLabelsVisible(true);
barSeries->setBarWidth(0.5);
}
//准备坐标轴对象
void BarChartEg::InitAxis1()
{
xAxis1 = new QBarCategoryAxis(this);
xAxis1->setGridLineVisible(false);
yAxis1 = new QValueAxis(this);
yAxis1->setRange(0, 60);
}
//准备坐标轴对象
void BarChartEg::InitAxis2()
{
xAxis2 = new QBarCategoryAxis(this);
xAxis2->setGridLineVisible(false);
yAxis2 = new QValueAxis(this);
yAxis2->setRange(0, 200);
}
//准备坐标轴对象
void BarChartEg::InitAxis3()
{
xAxis3 = new QBarCategoryAxis(this);
xAxis3->setGridLineVisible(false);
yAxis3 = new QValueAxis(this);
yAxis3->setRange(0, 100);
}
//产生随机数,并将数据添加到数据集
void BarChartEg::on_pBtnRandom_clicked()
{
ClearData1();
ClearData2();
ClearData3();
qsrand(QTime::currentTime().second()); //随机数种子
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
double randomData = 30 + (qrand() % 30); //随机数
ui.tableWidget->setItem(i,j,new QTableWidgetItem(QString::asprintf("%.0f",randomData)));
if (j == 0)
{
cnr1_1->append(randomData);
cnr2_1->append(randomData);
cnr3_1->append(randomData);
}
if (j == 1)
{
cnr1_2->append(randomData);
cnr2_2->append(randomData);
cnr3_2->append(randomData);
}
if (j == 2)
{
cnr1_3->append(randomData);
cnr2_3->append(randomData);
cnr3_3->append(randomData);
}
}
categories1.append("序列"+QString::number(i + 1));
categories2.append("序列" + QString::number(i + 1));
categories3.append("序列" + QString::number(i + 1));
}
//将横坐标的标签添加到横坐标轴
xAxis1->setCategories(categories1);
xAxis2->setCategories(categories2);
xAxis3->setCategories(categories3);
}
//清除数据
void BarChartEg::ClearData1()
{
//xAxis1->clear();
categories1.clear();
cnr1_1->remove(0, 4);
cnr1_2->remove(0, 4);
cnr1_3->remove(0, 4);
}
void BarChartEg::ClearData2()
{
//xAxis2->clear();
categories2.clear();
cnr2_1->remove(0, 4);
cnr2_2->remove(0, 4);
cnr2_3->remove(0, 4);
}
void BarChartEg::ClearData3()
{
//xAxis3->clear();
categories3.clear();
cnr3_1->remove(0, 4);
cnr3_2->remove(0, 4);
cnr3_3->remove(0, 4);
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt开发之QtCharts柱形图绘制
共50个文件
tlog:18个
obj:8个
cpp:5个
需积分: 40 15 下载量 94 浏览量
2022-03-23
17:16:30
上传
评论 2
收藏 17.7MB ZIP 举报
温馨提示
Qt开发之QtCharts柱形图绘制
资源详情
资源评论
资源推荐
收起资源包目录
BarChartDemo.zip (50个子文件)
BarChartDemo
BarChartEg
BarChartEg.sln 1KB
x64
Release
BarChartEg.exe 73KB
Debug
BarChartEg.ilk 2.01MB
BarChartEg.exe 208KB
BarChartEg.pdb 4.67MB
BarChartEg.sdf 53.06MB
BarChartEg.v12.suo 66KB
BarChartEg
barcharteg.cpp 8KB
barcharteg.ui 2KB
BarChartEg.vcxproj.user 689B
BarChartEg.vcxproj.filters 3KB
barcharteg.h 2KB
Resources
x64
Release
qrc_barcharteg.obj 2KB
main.obj 155KB
moc_barcharteg.obj 156KB
BarChartEg.log 2KB
barcharteg.obj 257KB
BarChartEg.tlog
BarChartEg.lastbuildstate 191B
custombuild.read.1.tlog 680B
cl.read.1.tlog 264KB
cl.write.1.tlog 2KB
cl.command.1.tlog 6KB
link.write.1.tlog 950B
link.command.1.tlog 2KB
link.read.1.tlog 4KB
custombuild.write.1.tlog 1KB
custombuild.command.1.tlog 2KB
Debug
qrc_barcharteg.obj 6KB
vc120.pdb 3.83MB
main.obj 460KB
moc_barcharteg.obj 464KB
BarChartEg.log 2KB
barcharteg.obj 705KB
BarChartEg.tlog
BarChartEg.lastbuildstate 189B
CL.write.1.tlog 4KB
CL.read.1.tlog 263KB
custombuild.read.1.tlog 680B
cl.command.1.tlog 6KB
link.write.1.tlog 1KB
link.command.1.tlog 2KB
link.read.1.tlog 4KB
custombuild.write.1.tlog 1KB
custombuild.command.1.tlog 2KB
barcharteg.qrc 70B
main.cpp 233B
GeneratedFiles
ui_barcharteg.h 4KB
Release
moc_barcharteg.cpp 3KB
qrc_barcharteg.cpp 1KB
Debug
moc_barcharteg.cpp 3KB
BarChartEg.vcxproj 19KB
共 50 条
- 1
不相信眼泪
- 粉丝: 51
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0