记录Qt 信号toggled 和triggered一个bug

最近在工作中遇到个bug,QAction使用了toggled信号,本意是定义一系列的action菜单,菜单中有,50%,75%,100%,200%,300%。发现在

void func1(){
connect(action, &QAction::toggled, [this, text] {
            ui->pushButtonZoom->setText(text);
        });
m_actionGroup->addAction(newAction(menu, "400%")); 
//略  
}

void  func2(){
.....
       for (auto action : m_actionGroup->actions()) {
        if (action->text() == text) {
            action->setChecked(true);
        } else {
            action->setChecked(false);
        }
    }
....
}     

发现当action的checkable状态变化时,开关各一次,触发toggled信号,这样就会导致重复操作同一个值 ui->pushButtonZoom->setText(text);重复赋值

查了下文档:
triggered:当用户激活某个动作时,会发出该信号;例如,当用户单击菜单选项、工具栏按钮或按下操作的快捷键组合时,或者当调用trigger()时。值得注意的是,当调用setChecked()或toggle()时,它不会发出。

如果该操作是可检查的,则如果选中该操作,则选中为true;如果未选中该操作则为false。

toggled:每当可检查操作更改其isChecked()状态时,就会发出此信号。这可能是用户交互的结果,也可能是因为调用了setChecked()。当setChecked()更改QAction时,除了toggled()之外,它还会发出changed()。

如果选中该操作,则checked为true;如果未选中该操作则为false。

注意:已检查属性的通知程序信号。另请参见QAaction::activate()、QAction::triggered()和checked。

再参考:博客
基本确定了是setChecked()多次触发toggled信号。而这里只需要命中时,执行一次操作即可,改用triggered()信号。解决bug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值