使用QCustomPlot做柱状图实现点击事件

本文介绍了如何在QCustomPlot中实现柱状图的点击事件。最初尝试通过QCPBars的信号实现,但发现不适用。最终通过监听QCustomPlot的selectionChanged信号并设置plottable可选,实现了柱子的双击选中。然而,这导致全选而非单个柱子点击时触发信号。作者发现错误在于误以为需要QCPBars发送信号,实际上可以直接利用QCustomPlot的plottableClick信号来达到目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要将之前做的QtCharts的柱状图改成用QCustomPlot

要实现之前的功能,结果发现QCustomPlot里面只有这些信号:

 

而在我们使用的柱子类QCPBars里面却只有三个信号:

 

 

直接 做connect也只有这些

粗暴一点直接 connect(bars ,SIGNAL(plottableClick()),this, SLOT()); 

会提示:没有这个信号...

所以回到这个信号selectionChanged :

This signal is emitted when the selection state of this plottable has changed, either by user interaction or by a direct call to setSelection. The parameter selection holds the currently selected data ranges.

只能说先勉强用着吧。

 

使用方法:

先设置customplot的plottable (绘图层)可选:

customplot->setInteractions( QCP::iSelectPlottables );

只有就可以双击选中柱子,触发这个信号。

所以对bars做一个connect连接

connect(bars,SIGNAL(selectionChanged(QCPDataSelection)),this,SLOT(barsClickedSlot()));

//槽函数
...barsClickedSlot()
{
    qDebug()<<"asdasdasdasdadsasdasd";
}

结果如下:

                 

暂时先这样。效果是全选而不是点击某一个柱子会有这个效果

 

/*........................................................*/

看了一下官方例子发现是自己走进误区了!

上面的做法是改变选择模式就会触发信号,也就是说一次点击实际上会触发两次

我并不需要让QCPBars发送信号,我直接用QCustomPlot发送信号就好了。。。

connect(customplot1,SIGNAL(plottableClick(QCPAbstractPlottable*,int,QMouseEvent*)),this,SLOT(bars2ClickedSlot(QCPAbstractPlottable*,int)));

直接让QCustomPlot 发送plottableClick信号,这个信号可以在plottable被点击时发送!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值