QT总结5-setMaximum与valuechanged坑

发现自从开始使用QT和OpenGL后就到处踩坑。

因为需要使用QT和OpenGL显示三维图像,整体上就是QT负责界面,OpenGL负责显示。界面需要的操作比较多,这个时候就必然是信号槽主场,然而我被他们快坑惨了。

问题出在QSlider这个控件上,因为需要调整控件范围,需要使用下面的函数:

slider->setMaximum(num);

这个函数用来设置QSlider的最大值,但是因为我在调用这个函数之前进行了connect信号槽的连接

connect(ui.slider, SIGNAL(valueChanged(int)),this, SLOT(onIndexChanged(int)), Qt::UniqueConnection);

将控件的valuechanged信号进行了绑定,本来以为只要不使用setValue函数就不会触发该信号槽,但是在使用setMaximum设置最大值的时候发现触发了valuechanged信号,也就是说会触发处理槽函数。我在使用的槽函数中有对OpenGL显示的控制,但是OpenGL对一些函数的使用顺序是有严格要求的,所以会出错,而OpenGL本身不报错,所以会很难定位错误。

解决方法目前想到两种:

第一种,在设置完最值之后再进行信号槽的绑定。

第二种,使用信号拦截函数,将有设置最值而产生的信号进行拦截。

slider->blockSignals(true);
slider->blockSignals(false);

这样在设置最值的时候对信号拦截,之后再开放信号。

ComboBox的addItems函数也有类似的情况。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值