医学软件项目开发(三):骨密度分析QChart创建及ROI相关操作

本文介绍了医学软件项目开发中关于骨密度分析的部分,主要聚焦于QChart的使用和ROI相关操作。在QChart部分,讨论了关键点如分段背景色,引入QCustomPlot类进行自定义,并解决在不同开发环境中的编译问题。在ROI处理中,涉及QPoint到cv::Point的转换以及QVector到std::vector的转换,同时提到了contourArea()函数的应用。

一.QChart

1.1关键

分段背景色

1.2思路

1.引入QCustomPlot类,官网下载,自定义功能丰富

2.设置线宽(c#中有示例代码)

1.3开发问题

1.在Qt creater测试无问题,在VisualStudio模块未加载进来,在项目右键选择属性->QT Project Settings->Qt Modules 选上Charts

2.文件迁移发生错误,在ui_DicomDisplayWidget中添加QT_CHARTS_USE_NAMESPACES(无效,需改为3)

3.重新编译ui文件会覆盖掉添加的宏定义,在DicomDisplayWidget.h头文件中添加QT_CHARTS_USE_NAMESPACES,且在#include"ui_DicomDisplayWidget.h"前

1.4示例代码
void MainWindow::createChart()
{
   
    
    //创建图表
    QChartView *chartView=new QChartView(this); //创建 ChartView
    QChart *chart = new QChart(); //创建 Chart
    chart->setTitle("骨密度仪参考:颈(骨密度)");
    chartView->setChart(chart); //Chart添加到ChartView
    this->setCentralWidget(chartView);

//创建曲线序列
    QLineSeries *series0 = new QLineSeries();
    QLineSeries *series1 = new QLineSeries();
    QLineSeries *series2 = new QLineSeries();
    QLineSeries *seriesh0 = new QLineSeries();
    QLineSeries *seriesh1 = new QLineSeries();
    QLineSeries *seriesh2 = new QLineSeries();
    
    //series0->setName("Sin曲线");
    //series1->setName("Cos曲线");
    chart->addSeries(series0); //序列添加到图表
    chart->addSeries(series1);
    chart->addSeries(series2); //序列添加到图表
    chart->addSeries(seriesh0);
    chart->addSeries(seriesh1); //序列添加到图表
    chart->addSeries(seriesh2);
    
    
    chart->addAxis(axisX,Qt::AlignBottom); //坐标轴添加到图表,并指定方向
    chart->addAxis(axisY,Qt::AlignLeft);
    chart->addAxis(axisY,Qt::AlignRight);

    series0->attachAxis(axisX); //序列 series0 附加坐标轴
    series0->attachAxis(axisY);

    series1->attachAxis(axisX);//序列 series1 附加坐标轴
    series1->attachAxis(axisY);

	QPen pen;
	pen.setStyle(Qt::DotLine);//Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLine
	pen.setWidth(2);
	pen.setColor(Qt::red);
	series0->setPen(pen);
	pen.setStyle(Qt::SolidLine);//Qt::SolidLine, Qt::DashLine, Qt::DotLine, Qt::DashDotLine
	pen.setColor(Qt::blue);
	series1->setPen(pen);

//序列添加数值
    qreal t=0,y1,y2,intv=0.1;
    int cnt=100;
    for(int i=0;i<cnt;i++)
    {
   
   
        y1=qSin(t);//+qrand();
        series0->append(t,y1);

        y2=qSin(t+20);
        series1->append(t,y2);
        t+=intv;
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值