0

我的程序有一个小问题。我在设置中有一个配置文件。我从中提取需要检查的对象的名称(这些是 QCheckBox)。我有这段代码(它可以编译并运行,但是当它在“cBox->setChecked”时它会崩溃):

void Preproc::on_tBtnManual_toggled(bool checked){

if(checked){
    ui->tBtnManual->setText("Systematic");
}else{
    ui->tBtnManual->setText("Manual");
    settings.beginGroup("Preprocessing");
    QStringList keys = settings.childKeys();
    foreach(QString configParam,keys){
        QCheckBox *cBox = ui->gridLayout->findChild<QCheckBox *>(configParam);
        cBox->setChecked(settings.value(configParam).toBool());
    }
 }

}

我试图把 ui->cBox->... 放进去说 cBox 不是 ui 的孩子。如果我 qDebug(cBox) 我有一个 QObject(0x0) 那么什么都没有!

我对 Qt 有点陌生,所以也许这很简单。感谢,并有一个愉快的一天 :)

4

2 回答 2

1

你确定找到了一个对象吗?我不这么认为(不同的名字?错误的布局?)。没有找到时,cBox 为 0x0。但是放一个

if (cBox)

cBox->setChecked(settings.value(configParam).toBool());

当它没有按名称找到对象时,它不会再崩溃了。

于 2013-06-07T14:11:51.057 回答
0

您确定名称(configParam 的内容)正确吗?您可以尝试从 QApplication 搜索

QApplication::instance()->findChild<QCheckBox *>(configParam);

findChild 方法执行递归搜索,如果对象存在于 hirachie 中,就会被找到。如果找不到对象,则可能是:

  • 对象不存在
  • 对象有另一个名字
  • 对象或其祖先之一没有(NULL)父对象

您可以使用复选框发布 .ui 文件的一部分吗?这会很有帮助。

于 2013-06-07T14:16:48.827 回答