查看完整版本: [-- check_box toggled信号的槽函数中setChecked(false)程序崩溃 --]

QTCN开发网 -> Qt基础编程 -> check_box toggled信号的槽函数中setChecked(false)程序崩溃 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

gym216 2020-07-01 08:39

check_box toggled信号的槽函数中setChecked(false)程序崩溃

我想在复选框被打勾选中时,判断条件,如果达不到就把选中状态取消。设置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 2020-07-01 09:24
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 2020-07-01 09:56
果然是这样。谢谢帮助!
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 2020-07-01 10:02
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 2020-07-01 12:12
因为没有具体代码,所以无法详细说。
但是有基本的方法的。
如果你能确定if后面的条件是true,但是file_save的close方法并没有执行,那么你可有看看是否closeEvent并没有被执行?或者执行了,只是你不知道?
打个断点,调试一下,或者直接qDebug一下,就都知道了。




查看完整版本: [-- check_box toggled信号的槽函数中setChecked(false)程序崩溃 --] [-- top --]



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