QT中经常会用到blockSignals, 且是成对出现,实现时常在函数的开始阻塞信号,在函数的结尾释放信号。
若里面有大量需要阻塞的变量对象,这样写是件很麻烦的事,代码也比较多。
如果能实现象下面的方式实现,这样能简化很多,且不关心释放问题.
下面的例子是关于slider与spinbox联动问题,若改slider影响spinbox,反之如此。
实现效果可参考www.thinkvd.com中的视频编辑效果
样例代码:
void ImEffectWidget::slotSlider(int pos)
{
static int oldPos = 0;
if (oldPos != pos)
{
QRect r;
QObject *o = sender();
//
ImSignalBlock block;
block << m_ui.spinBoxTransparent << m_ui.spinBoxVerticalPos
<< m_ui.spinBoxHerizontalPos << m_ui.spinBoxSTTransparent
<< m_ui.spinBoxSTVPos;
int tabType = m_treeItem->mdata("effect_catalog").toInt();
if (tabType == TAB_CATALOG_WATERMARK ){
r = m_treeItem->getEffect