查看完整版本: [-- QpushButton设置checkable属性后的相关问题求解 --]

QTCN开发网 -> Qt基础编程 -> QpushButton设置checkable属性后的相关问题求解 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

michael王 2018-03-20 21:44

QpushButton设置checkable属性后的相关问题求解

小弟最近在学习Qt编写串口通信程序,遇到一个问题,自己想了想没有解决,请教一下各路大神
想着设置QpushButton为checkable状态,按钮弹起时串口处于关闭状态,按下时串口处于开启状态。
void MainWindow::on_pushButton_switch_toggled(bool checked) //打开与关闭串口槽函数
{    
    if(checked)    
    {        
        if(my_serialport->open(QIODevice::WriteOnly))
        {            
            my_serialport->setBaudRate(19200);
            //设置波特率为19200
            my_serialport->setDataBits(QSerialPort::Data8);
            //设置数据位为8
            my_serialport->setParity(QSerialPort::NoParity);
            //设置为无奇偶检验
            my_serialport->setStopBits(QSerialPort::OneStop);
           //设置停止位为1
            my_serialport->setFlowControl(QSerialPort::NoFlowControl);
            //设置为无控制流
        }
        else
        {            
            //ui->pushButton_switch->setCheckable(false);
            ui->pushButton_switch->setChecked(!checked);
            FailPromptWindow();
            //ui->pushButton_switch->setCheckable(true);
            cout << "serial open fail" << endl;
        }
    }    
    else
    {
          if(my_serialport->isOpen())  //若串口处于打开状态,关闭串口
         {
               my_serialport->close();
          }    
     }
}

connect(ui->pushButton_switch,SIGNAL(toggled(bool)),this,SLOT(on_pushButton_switch_toggled(bool)));
//关联pushButton_swtich按键与打开关闭串口槽函数

connect语句与开关函数如上所示,当串口打开失败时,重设pushButton开关状态为弹起状态,并弹出串口打开失败的提示窗口 FailPromptDialog(); 但是实际运行时发现,在打开失败情况下,可能是由于重置了开关状态:

ui->pushButton_switch->setChecked(!checked);

所以失败提示窗口出现了两次,并且“serial open fail”也在控制台输出两次。
为了解决这个问题,想着在重置开关状态前先把开关设置成enable状态,但是好像失败了。

ui->pushButton_switch->setEnabled(false);...(ui->pushButton_switch->setChecked(!checked);)ui->pushButton_switch->setEnabled(true);

虽然觉得不可行,但再次尝试设置为uncheckable状态,好像又失败了。

ui->pushButton_switch->setCheckable(false);...(ui->pushButton_switch->setChecked(!checked);)ui->pushButton_switch->setCheckable(true);
有没有大神能指教一下怎么设置可以避免两次触发失败提示窗口

PS:最好能保留使用pushButton的check属性。


yuyu414 2018-03-21 08:34
先disconnect,设置完再connect

never_forget 2018-03-21 09:00
这个函数 on_pushButton_switch_toggled 来看,你是直接从界面上跳转的槽函数,为什么还要用代码关联一次?另外如果不是这个问题导致的,建议查看一下逻辑吧,有可能逻辑上还有别的地方触发了这个信号~

大漠之鹰 2018-03-21 10:20
设置的时候 signalBlock true,设置完后 false

michael王 2018-03-21 22:46
never_forget:这个函数 on_pushButton_switch_toggled 来看,你是直接从界面上跳转的槽函数,为什么还要用代码关联一次?另外如果不是这个问题导致的,建议查看一下逻辑吧,有可能逻辑上还有别的地方触发了这个信号~
 (2018-03-21 09:00) 

灰常感谢,脑子一热多写了个connect关联,注释掉之后不再出现两次触发的问题,看来问题不是出在重置pushbutton属性的上


查看完整版本: [-- QpushButton设置checkable属性后的相关问题求解 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled