Qt绘制简单图表

Qt图表类似于model/view,chart就是model。
创建图表的各个部件:
QChart *chart = new QChart();chart->setTitle(tr("简单函数曲线"));
//    chart->setAcceptHoverEvents(true);ui->chartView->setChart(chart);ui->chartView->setRenderHint(QPainter::Antialiasing);QLineSeries *series0 = new QLineSeries();QLineSeries *series1 = new QLineSeries();series0->setName("Sin曲线");series1->setName("Cos曲线");curSeries=series0; //当前序列QPen    pen;pen.setStyle(Qt::DotLine);//Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLinepen.setWidth(2);pen.setColor(Qt::red);series0->setPen(pen); //折线序列的线条设置pen.setStyle(Qt::SolidLine);//Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLinepen.setColor(Qt::blue);series1->setPen(pen);//折线序列的线条设置chart->addSeries(series0);chart->addSeries(series1);

创建坐标轴:

QValueAxis *axisX = new QValueAxis;curAxis=axisX; //当前坐标轴axisX->setRange(0, 10); //设置坐标轴范围axisX->setLabelFormat("%.1f"); //标签格式axisX->setTickCount(11); //主分隔个数axisX->setMinorTickCount(4);axisX->setTitleText("time(secs)"); //标题
//    axisX->setGridLineVisible(false);QValueAxis *axisY = new QValueAxis;axisY->setRange(-2, 2);axisY->setTitleText("value");axisY->setTickCount(5);axisY->setLabelFormat("%.2f"); //标签格式
//    axisY->setGridLineVisible(false);axisY->setMinorTickCount(4);

将坐标轴添加进图表:

    chart->addAxis(axisX,Qt::AlignBottom); //坐标轴添加到图表,并指定方向chart->addAxis(axisY,Qt::AlignLeft);series0->attachAxis(axisX); //序列 series0 附加坐标轴series0->attachAxis(axisY);series1->attachAxis(axisX);//序列 series1 附加坐标轴series1->attachAxis(axisY);
从图表上获取数据更新界面显示:
void MainWindow::updateFromChart()
{ //从图表上获取数据更新界面显示QChart  *aChart;aChart=ui->chartView->chart();  //获取chartui->editTitle->setText(aChart->title()); //图表标题QMargins    mg=aChart->margins(); //边距ui->spinMarginLeft->setValue(mg.left());ui->spinMarginRight->setValue(mg.right());ui->spinMarginTop->setValue(mg.top());ui->spinMarginBottom->setValue(mg.bottom());
}

设置图表各种参数:

void MainWindow::on_btnSetTitle_clicked()
{ //设置图标标题文字QString str=ui->editTitle->text();ui->chartView->chart()->setTitle(str);
}void MainWindow::on_btnSetTitleFont_clicked()
{ //设置图标标题文字的字体QFont font=ui->chartView->chart()->titleFont();bool  ok=false;font=QFontDialog::getFont(&ok,font);if (ok)ui->chartView->chart()->setTitleFont(font);
}void MainWindow::on_btnSetMargin_clicked()
{//设置图标的4个边距QMargins    mgs;mgs.setLeft(ui->spinMarginLeft->value());mgs.setRight(ui->spinMarginRight->value());mgs.setTop(ui->spinMarginTop->value());mgs.setBottom(ui->spinMarginBottom->value());ui->chartView->chart()->setMargins(mgs);
}{//图例是否可见ui->chartView->chart()->legend()->setVisible(checked);
}void MainWindow::on_btnSetAxisRange_clicked()
{ //设置坐标轴的坐标范围curAxis->setRange(ui->spinAxisMin->value(),ui->spinAxisMax->value());
}void MainWindow::on_chkGridLineVisible_clicked(bool checked)
{ //轴的网格线是否可见curAxis->setGridLineVisible(checked);
}void MainWindow::on_chkMinorTickVisible_clicked(bool checked)
{ //次级刻度是否可见curAxis->setMinorGridLineVisible(checked);
}void MainWindow::on_chkBoxLegendBackground_clicked(bool checked)
{//图例的背景是否可见ui->chartView->chart()->legend()->setBackgroundVisible(checked);
}void MainWindow::on_radioButton_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignTop);
}void MainWindow::on_radioButton_2_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignBottom);
}void MainWindow::on_radioButton_3_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignLeft);
}void MainWindow::on_radioButton_4_clicked()
{//图例的位置ui->chartView->chart()->legend()->setAlignment(Qt::AlignRight);
}void MainWindow::on_btnLegendFont_clicked()
{ //图例的字体设置QFont font=ui->chartView->chart()->legend()->font();bool  ok=false;font=QFontDialog::getFont(&ok,font);if (ok)ui->chartView->chart()->legend()->setFont(font);
}void MainWindow::on_btnLegendlabelColor_clicked()
{//图例的文字颜色设置QColor  color=ui->chartView->chart()->legend()->labelColor();color=QColorDialog::getColor(color);if (color.isValid())ui->chartView->chart()->legend()->setLabelColor(color);
}void MainWindow::on_btnGridLineColor_clicked()
{ //网格线的颜色设置QColor   color=curAxis->gridLineColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setGridLineColor(color);
}void MainWindow::on_pushButton_10_clicked()
{ //网格线的Pen设置QPen    pen;pen=curAxis->gridLinePen();bool    ok=false;pen=QWDialogPen::getPen(pen,ok);if (ok)curAxis->setGridLinePen(pen);
}void MainWindow::on_chkAxisLineVisible_clicked(bool checked)
{//刻度是否可见curAxis->setLineVisible(checked);
}void MainWindow::on_btnAxisLinePen_clicked()
{QPen    pen;pen=curAxis->linePen();bool    ok=false;pen=QWDialogPen::getPen(pen,ok);if (ok)curAxis->setLinePen(pen);
}void MainWindow::on_btnAxisLinePenColor_clicked()
{QColor   color=curAxis->linePenColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setLinePenColor(color);
}void MainWindow::on_btnMinorColor_clicked()
{//次级刻度网格线颜色QColor   color=curAxis->minorGridLineColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setMinorGridLineColor(color);
}void MainWindow::on_btnMinorPen_clicked()
{//次级刻度线Pen设置QPen    pen;pen=curAxis->minorGridLinePen();bool    ok=false;pen=QWDialogPen::getPen(pen,ok);if (ok)curAxis->setMinorGridLinePen(pen);
}

设置数据序列各种属性:

void MainWindow::on_chkPointVisible_clicked(bool checked)
{//序列的数据点是否可见curSeries->setPointsVisible(checked);
}void MainWindow::on_chkPointLabelVisible_clicked(bool checked)
{ //序列的数据点标签是否可见curSeries->setPointLabelsVisible(checked);
}void MainWindow::on_btnSeriesName_clicked()
{ //设置序列名称curSeries->setName(ui->editSeriesName->text());if (ui->radioSeries0->isChecked())ui->radioSeries0->setText(ui->editSeriesName->text());elseui->radioSeries1->setText(ui->editSeriesName->text());
}void MainWindow::on_btnSeriesColor_clicked()
{ //序列的曲线颜色QColor  color=curSeries->color();color=QColorDialog::getColor(color);if (color.isValid())curSeries->setColor(color);
}void MainWindow::on_radioSeries0_clicked()
{//获取当前数据序列if (ui->radioSeries0->isChecked())curSeries=(QLineSeries *)ui->chartView->chart()->series().at(0);elsecurSeries=(QLineSeries *)ui->chartView->chart()->series().at(1);
//获取序列的属性值,并显示到界面上ui->editSeriesName->setText(curSeries->name());ui->chkSeriesVisible->setChecked(curSeries->isVisible());ui->chkPointVisible->setChecked(curSeries->pointsVisible());ui->sliderSeriesOpacity->setValue(curSeries->opacity()*10);ui->chkPointLabelVisible->setChecked(curSeries->pointLabelsVisible());
}void MainWindow::on_chkSeriesVisible_clicked(bool checked)
{//序列是否可见this->curSeries->setVisible(checked);
}void MainWindow::on_btnSeriesPen_clicked()
{//序列线条的Pen设置bool    ok=false;QPen    pen;pen=curSeries->pen();pen=QWDialogPen::getPen(pen,ok);if (ok)curSeries->setPen(pen);
}void MainWindow::on_sliderSeriesOpacity_valueChanged(int value)
{//序列的透明度curSeries->setOpacity(value/10.0);
}void MainWindow::on_btnSeriesLabColor_clicked()
{//序列数据点标签颜色QColor  color=curSeries->pointLabelsColor();color=QColorDialog::getColor(color);if (color.isValid())curSeries->setPointLabelsColor(color);}void MainWindow::on_btnSeriesLabFont_clicked()
{//序列数据点标签字体QFont   font;font=curSeries->pointLabelsFont();bool    ok=false;font=QFontDialog::getFont(&ok,font);if (ok)curSeries->setPointLabelsFont(font);
}void MainWindow::on_radioSeriesLabFormat0_clicked()
{ //序列数据点标签的显示格式curSeries->setPointLabelsFormat("@yPoint");
}void MainWindow::on_radioSeriesLabFormat1_clicked()
{//序列数据点标签的显示格式curSeries->setPointLabelsFormat("(@xPoint,@yPoint)");
}

设置坐标轴属性:

void MainWindow::on_chkBoxVisible_clicked(bool checked)
{ //坐标轴是否可见curAxis->setVisible(checked);
}void MainWindow::on_btnAxisSetTitle_clicked()
{ //设置坐标轴的标题curAxis->setTitleText(ui->editAxisTitle->text());
}void MainWindow::on_btnAxisSetTitleFont_clicked()
{ //设置坐标轴的标题的字体QFont   font=curAxis->titleFont();bool    ok=false;font=QFontDialog::getFont(&ok,font);if (ok)curAxis->setTitleFont(font);
}void MainWindow::on_chkBoxAxisTitle_clicked(bool checked)
{ //轴标题是否可见curAxis->setTitleVisible(checked);
}void MainWindow::on_pushButton_clicked()
{//设置坐标轴刻度标签的文字格式curAxis->setLabelFormat(ui->editAxisLabelFormat->text());
}void MainWindow::on_btnAxisLabelColor_clicked()
{//设置坐标轴刻度标签的文字颜色QColor   color=curAxis->labelsColor();color=QColorDialog::getColor(color);if (color.isValid())curAxis->setLabelsColor(color);
}void MainWindow::on_btnAxisLabelFont_clicked()
{//设置坐标轴刻度标签的文字字体QFont   font=curAxis->labelsFont();bool    ok=false;font=QFontDialog::getFont(&ok,font);if (ok)curAxis->setLabelsFont(font);
}void MainWindow::on_chkBoxLabelsVisible_clicked(bool checked)
{//轴的刻度标签是否可见curAxis->setLabelsVisible(checked);
}
动画效果:
void MainWindow::on_cBoxAnimation_currentIndexChanged(int index)
{//动画效果ui->chartView->chart()->setAnimationOptions(QChart::AnimationOptions(index));
//    ui->chartView->chart()->setAnimationOptions(QChart::SeriesAnimations);
//    ui->chartView->chart()->setAnimationOptions(QChart::AllAnimations);
}
图标的主题:
void MainWindow::on_cBoxTheme_currentIndexChanged(int index)
{ //图标的主题ui->chartView->chart()->setTheme(QChart::ChartTheme(index));
}

尺寸相关:

void MainWindow::on_actZoomIn_triggered()
{//放大ui->chartView->chart()->zoom(1.2);//zoomIn();
}void MainWindow::on_actZoomOut_triggered()
{//缩小ui->chartView->chart()->zoom(0.8);//zoomOut();
}void MainWindow::on_actZoomReset_triggered()
{//复位ui->chartView->chart()->zoomReset();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/140821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络安全自学

前言 一、什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防…

springboot---pom.xml

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 https://…

纯c语言模拟栈和队列(初学必看)

一、栈(Stack) 1.栈的概念及其结构 栈是一种特殊的线性表&#xff0c;在栈这个结构里&#xff0c;越先存进去的数据越难取出来。 这个结构就像是一个只有一端有打开的容器&#xff0c;越先放进去的球越在底部&#xff0c;想要把底部的球拿出来&#xff0c;就必须先把前面的求…

C#8.0本质论第十二章--泛型

C#8.0本质论第十二章–泛型 C#通过泛型来促进代码重用&#xff0c;在词义上等价于C模板。 在泛型编程中&#xff0c;数据类型也是一种参数。 12.1如果C#没有泛型 为object的方法使用值类型时&#xff0c;“运行时”将自动对它进行装箱&#xff0c;获取值类型的实例时则需要…

树莓派4B的测试记录(CPU、FFMPEG)

本文是用来记录树莓派 4B 的一些测试记录。 温度 下面记录中的风扇和大风扇是这样的&#xff1a; 为什么要用大风扇呢&#xff1f;因为小风扇在外壳上&#xff0c;气流通过外壳的珊格会有啸叫&#xff0c;声音不大但是很烦人&#xff0c;大风扇没这个问题&#xff0c;并且同样…

Vue3 数据响应式原理:Proxy和Reflect

我们在Vue2中使用的是Object.defineProperty方法来实现数据响应式的&#xff0c;可以通过get和set方法来监听对象的访问和修改。 但是并不能响应对象中属性的增加和删除&#xff0c;只能使用Vue.$set 和Vue.$delete 来对对象中的属性进行增加和删除。 数组也不能直接通过下标…

PyCharm因安装了illuminated Cloud插件导致加载项目失败

打开Pycharm时会有弹窗提示&#xff1a; The license for Illuminated Cloud is invalid or has expired. All Illuminated Cloud features will be disabled. 这个弹窗会导致你加载项目一直失败&#xff0c;close project 也关不掉&#xff0c;我都是用任务管理器杀死进程的…

Jmeter 性能 —— 负载阶梯场景!

1、安装阶梯测试的第三方插件->搜jpgc 选项-JMeter Plugins Manager -搜jpgc 空格&#xff0c;然后安装 2、脚本-线程组选jpgc Stepping Thread Group 最终并发数为100&#xff0c;并发数从0开始&#xff0c;5秒内增加10个并发数&#xff0c;增加10个后持续30s&#xff0c;…

学习c#的第十天

目录 C# 字符串&#xff08;String&#xff09; 创建 String 对象 String 类的属性 String 类的方法 实例 C#的string.Format格式化日期 C# 字符串&#xff08;String&#xff09; 创建 String 对象 可以使用以下方法之一来创建 string 对象&#xff1a; 1、通过给 St…

taro(踩坑) npm run dev:weapp 微信小程序开发者工具预览报错

控制台报错信息&#xff1a; VM72:9 app.js错误: Error: module vendors-node_modules_taro_weapp_prebundle_chunk-JUEIR267_js.js is not defined, require args is ./vendors-node_modules_taro_weapp_prebundle_chunk-JUEIR267_js.js 环境&#xff1a; node 版本&#x…

Spring Boot(二)

1、运行维护 1.1、打包程序 SpringBoot程序是基于Maven创建的&#xff0c;在Maven中提供有打包的指令&#xff0c;叫做package。本操作可以在Idea环境下执行。 mvn package 打包后会产生一个与工程名类似的jar文件&#xff0c;其名称是由模块名版本号.jar组成的。 1.2、程序…

vue分片上传视频并转换为m3u8文件并播放

开发环境&#xff1a; 基于若依开源框架的前后端分离版本的实践&#xff0c;后端java的springboot&#xff0c;前端若依的vue2&#xff0c;做一个分片上传视频并分段播放的功能&#xff0c;因为是小项目&#xff0c;并没有专门准备文件服务器和CDN服务&#xff0c;后端也是套用…

2023NewStarCTF

目录 一、阳光开朗大男孩 二、大怨种 三、2-分析 四、键盘侠 五、滴滴滴 六、Include? 七、medium_sql 八、POP Gadget 九、OtenkiGirl 一、阳光开朗大男孩 1.题目给出了secret.txt和flag.txt两个文件&#xff0c;secret.txt内容如下&#xff1a; 法治自由公正爱国…

【Redis】list常用命令内部编码使用场景

文章目录 前置知识列表类型的特点 命令LPUSHLPUSHXRPUSHRPUSHXLRANGELPOPRPOPLINDEXLREMLINSERTLTRIMLSETLLEN 阻塞版本命令BLPOPBRPOP 命令总结内部编码测试内部编码 使用场景消息队列分频道的消息队列 模拟栈和队列 前置知识 列表类型是⽤来存储多个有序的字符串&#xff0c…

第一次实操Python+robotframework接口自动化测试

目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出&#xff0c;通过关键字的封装实现一定意义上的脚本与用例的脱离&#xff01; robot framework 的安装不过多说明&#xff0c;网上资料比较太多~ 实例&#xff1a;&#xff01;&#xff01;&#xff01;&#xff01…

AI:80-基于深度学习的医学图像分割与病变识别

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新中,…

day55 反向解析和视图层精确定位

上周内容回顾 orm的增删改查 1. 查询 from app01 import models models.UserInfo.objects.all() # 查询所有的字段信息和数据 resmodels.UserInfo.objects.first() # 查询一条&#xff0c;而且是第一条&#xff0c;queryset对象&#xff0c;列表套对象的形式 if res:res[0] t…

【表面重建】第一篇:delaunay三角化(未完)

文章目录 声明delaunay三角片的特性实现delaunay算法的分类生长算法逐点插入算法分治算法基于Bowyer-Watson算法 code调用scipy的API调用cgal的API 参考来源 声明 本帖持续更新中最近一次更新日期&#xff1a;2023.11.13如有纰漏望指正&#xff01; delaunay三角片的特性 de…

Flink SQL 表值聚合函数(Table Aggregate Function)详解

使用场景&#xff1a; 表值聚合函数即 UDTAF&#xff0c;这个函数⽬前只能在 Table API 中使⽤&#xff0c;不能在 SQL API 中使⽤。 函数功能&#xff1a; 在 SQL 表达式中&#xff0c;如果想对数据先分组再进⾏聚合取值&#xff1a; select max(xxx) from source_table gr…

2022年06月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 Python中 print(“八进制{: o}”.format(12)) 正确的输出结果是?( ) A: 八进制:O B: 八进制:O14 C: 八进制14O D: 八进制14 答案:D 字符串的format()格式。 第2题 下列的程…