• 2634阅读
  • 4回复

check_box toggled信号的槽函数中setChecked(false)程序崩溃 [复制链接]

上一主题 下一主题
离线gym216
 

只看楼主 倒序阅读 楼主  发表于: 2020-07-01
我想在复选框被打勾选中时,判断条件,如果达不到就把选中状态取消。设置checkbox的toggled的槽函数如下:
void MainWindow::on_checkBox_5_toggled(bool checked)
{
    bool result;
    if(checked)
    {
        if(file_save==NULL) qDebug()<<"file save=NULL";
        if(ui->labelPath->text().isEmpty())
        {
            result=false;
        }
        else
        {
               result=true;
        }
        if(result==false)
        {
            qDebug()<<"result= false";
            //ui->checkBox_5->setChecked(false); //打开这一句就异常退出
        }
    }
    else
    {
        qDebug()<<"check_box= false";
    }
}
离线clickto

只看该作者 1楼 发表于: 2020-07-01
ui->checkBox_5->setChecked(false); 这句会导致再次进入函数自身on_checkBox_5_toggled(bool checked),形成一个没有退出条件的递归。
要达到你要的效果,可以试试别的信号组合,比如:

void MainWindow::on_checkBox_clicked()
{
    if(ui->lineEdit->text().isEmpty())
    {
        ui->checkBox->setChecked(false);
    }
}
离线gym216

只看该作者 2楼 发表于: 2020-07-01
果然是这样。谢谢帮助!
void MainWindow::on_checkBox_5_clicked()
{
    qDebug()<<"check_box_state="<<ui->checkBox_5->checkState();
    if(ui->checkBox_5->checkState()==Qt::Checked)
    {
        if(ui->labelPath->text().isEmpty())
        {
            ui->checkBox_5->setChecked(false);
        }
    }
    else
    {

    }
}
离线gym216

只看该作者 3楼 发表于: 2020-07-01
回 clickto 的帖子
clickto:ui->checkBox_5->setChecked(false); 这句会导致再次进入函数自身on_checkBox_5_toggled(bool checked),形成一个没有退出条件的递归。
要达到你要的效果,可以试试别的信号组合,比如:
void MainWindow::on_checkBox_clicked()
{
....... (2020-07-01 09:24) 

谢谢。还有个问题帮我看下吧:我在头文件定义个指针QFile *file_save; 在程序关闭前检测file_save是否有打开的文件并关闭。实际操作有问题
void MainWindow::closeEvent(QCloseEvent *event)
{
    if(file_save !=NULL &&file_save->isOpen())
    {
        file_save->close();
    }
}
实际程序并没有操作*file_save,但是file_save !=NULL &&file_save->isOpen() 这两个都是true
离线clickto

只看该作者 4楼 发表于: 2020-07-01
因为没有具体代码,所以无法详细说。
但是有基本的方法的。
如果你能确定if后面的条件是true,但是file_save的close方法并没有执行,那么你可有看看是否closeEvent并没有被执行?或者执行了,只是你不知道?
打个断点,调试一下,或者直接qDebug一下,就都知道了。


快速回复
限100 字节
 
上一个 下一个