(转载)Qt中blockSignals函数的用法

首先遇到的问题:

今天在使用Qt对QComboBox控件添加内容时,不管是用下列两个函数中的哪个都会出问题。

void QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())

void QComboBox::insertItem(int index, const QString &text, const QVariant &userData = QVariant())

之后对添加的内容、函数的使用方法甚至是ComboBox的属性都进行了再三确认,也在新工程上测试过,还是不行。

最后终于发现问题所在了:我的项目在构造函数中对该comboBox对象调用了信号槽连接

即: QObject::connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboBoxSlot()));

应该在调用QComboBox::addItem函数之前使用一下

QObject::disconnect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboBoxSlot()));

添加完成后再调用

QObject::connect(ui->comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboBoxSlot())); 即可。

总结:

如果对ComboBox有做信号槽连接,那么在对其内容进行修改时应该先将信号槽连接断开,操作完成后再连接 

给一个创建了信号槽的ComboBox添加或去除Item时采用的方法是在对该ComboBox操作前先使用disconn函数将信号槽先切断,操作好后在connect。

上文另解:

今天发现有另一种解决方法,就是使用blockSignals函数。

该函数的原型:bool QObject::blockSignals(bool block)

官方解释:If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it). If block is false, no such blocking will occur.

理解:如果block为真,阻塞信号,或者如果block为假,取消信号阻塞。如果信号被阻塞,被发射的信号消失在超空间

所以可以在addItem和insertItem之前设置blockSignals(true),之后设置成blockSignals(false)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值