QT QchartView制作柱状图的简单例子

 

最基本的柱状图: 

    //数据
    QBarSet *set0 = new QBarSet("SET0");
    *set0<<0<<10<<8<<12<<7<<19<<14;


    //分组
    QBarSeries *series = new QBarSeries();
    series->append(set0);

    //图表
    QChart *chart=new QChart;
    QChartView *chartview=new QChartView;
    chart->addSeries(series);

    //横、纵坐标轴线
    QValueAxis *axisX=new QValueAxis;
    QValueAxis *axisY=new QValueAxis;
    axisX->setRange(0,10);                //X轴的范围
    axisX->setTickCount(11);              //X轴分成多少格
    axisY->setRange(0,21);                //Y轴的范围
    axisY->setTickCount(11);              //Y分成多少格

    //将图标放入chartview
    chart->createDefaultAxes();
    chart->setAxisX(axisX,series);
    chart->setAxisY(axisY,series);
    chartview->setChart(chart);

    //将表格放入布局中
    QVBoxLayout *boxlayout=new QVBoxLayout;
    boxlayout->addWidget(chartview);
    this->setLayout(boxlayout);

 各种属性设置与优化:

//柱颜色
set0->setColor(Qt::black);

//柱状中lable位置,显示数据的值
series->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);
series->setLabelsVisible(true);

chart->setTitle("这是表格标题");
chart->setAnimationOptions(QChart::SeriesAnimations); //动画
chart->legend()->setVisible(true);                    //数据标签名
chart->legend()->setAlignment(Qt::AlignBottom);       //数据标签位置
chartview->setRenderHint(QPainter::Antialiasing);

axisX->setRange(0,10);
axisY->setRange(0,20);
//X轴的设置
axisX->setTitleText("这是X轴名");
axisX->setLabelFormat("%.1f");            //小数位数
axisX->setTickCount(11);                  //分成多少格
axisX->setGridLineVisible(true);          //网格显示
axisX->setGridLineColor(QColor(Qt::blue));//网格颜色
axisX->setMinorTickCount(4);              //小刻度
axisX->setMinorGridLineColor(Qt::green);  //小刻度线颜色
axisX->setLabelsColor(Qt::red);           //轴刻度的文字颜色

//X轴的设置
axisY->setTitleText("这是Y轴名");
axisY->setLabelFormat("%.1f");            //小数位数
axisY->setTickCount(11);                  //分成多少格
axisY->setGridLineVisible(true);          //网格显示
axisY->setGridLineColor(QColor(Qt::blue));//网格颜色
axisY->setMinorTickCount(4);              //小刻度
axisY->setMinorGridLineColor(Qt::green);  //小刻度线颜色
axisY->setLabelsColor(Qt::red);           //轴刻度的文字颜色

//自定义小刻度线
QPen pen;
pen.setStyle(Qt::SolidLine);              //实线
pen.setWidth(1);                          //宽度
pen.setBrush(QColor(50, 50, 50, 100));    //颜色
pen.setCapStyle(Qt::SquareCap);           //笔迹尾部
pen.setJoinStyle(Qt::BevelJoin);          //笔迹转角
axisX->setMinorGridLinePen(pen);
axisY->setMinorGridLinePen(pen);

 

 

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Qt中,实现鼠标放置在柱状图上显示数据的方法相对简单,主要步骤如下: 1. 首先需要创建柱状图,并使用QChartView柱状图显示出来。 2. 在柱状图中添加鼠标移动事件。可以通过继承QChartView并重写mouseMoveEvent()方法来实现。 3. 在mouseMoveEvent()方法中,需要获取鼠标的坐标,然后使用QChartView的mapToValue()方法将屏幕坐标映射为图表中的值。 4. 接下来可以使用QChart的series()方法获取柱状图的数据序列,并遍历查找与鼠标所在位置对应的数据点。一旦找到了对应的数据点,就可以在柱状图上绘制一个临时的提示框来显示该数据点的值,如使用QToolTip::showText()方法。 5. 最后,记得在mouseMoveEvent()方法结束前隐藏提示框,并恢复柱状图的状态。 总之,通过上述步骤,在Qt平台上实现鼠标放置在柱状图上显示数据并不困难。具体实现可以参考Qt文档和示例代码。 ### 回答2: Qt柱状图可以为用户提供直观的视觉反馈和数据分析功能。为了让用户更好地了解和分析数据,我们可以在鼠标悬停在柱状图上时,显示与该柱状图相关的数据。 在Qt中实现这个功能有多种方法,下面我介绍其中一种可能的解决方案。我们可以使用QWidget组件的ToolTip属性,当鼠标进入柱状图区域时,将ToolTip属性设置为柱状图所代表的数据。这个过程可以通过一个自定义的事件过滤器来完成。 首先,我们需要在柱状图控件上安装一个事件过滤器,以便在鼠标进入和离开柱状图时处理相应的事件。在事件过滤器的实现中,我们需要根据鼠标位置计算出鼠标所在的柱状图,并将其数据设置为ToolTip属性。当ToolTip属性被设置后,Qt在鼠标悬停在柱状图上时会自动显示相应的数据。 下面是一个简单的代码示例,用于演示如何实现这个过程: ```c++ bool MyEventFilter::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::Enter) { QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); QPoint pos = mouseEvent->pos(); MyBarChart *barChart = qobject_cast<MyBarChart *>(obj); if (barChart) { int index = barChart->calcBarIndexAtPos(pos); if (index >= 0 && index < barChart->barCount()) { QString data = QString("Bar %1: %2").arg(index).arg(barChart->barData(index)); barChart->setToolTip(data); } } } return false; } ``` 这个例子中,我们定义一个MyEventFilter类,它是一个QObject子类,用于实现事件过滤器。在eventFilter()函数中,我们检查事件类型是否是鼠标进入事件(QEvent::Enter),并获取事件的鼠标位置。然后,我们将Qobject类型的obj转换为MyBarChart类型,并使用calcBarIndexAtPos()函数计算出鼠标所在的柱状图索引。最后,我们根据柱状图索引设置ToolTip属性,并返回false以表示其他对象也可以接收此事件。 通过这种方法,我们可以轻松为Qt柱状图添加鼠标悬停数据显示功能,提高用户对数据的了解和分析能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值