【问题标题】:Use an QObject found by it's QObjectName使用通过 QObjectName 找到的 QObject
【发布时间】:2013-06-07 14:00:20
【问题描述】:

我的程序有一点问题。我在设置中有一个配置文件。我从中提取需要检查的对象的名称(这些是 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 有点陌生,所以这可能是一件简单的事情。 谢谢,祝你有美好的一天:)

【问题讨论】:

    标签: qt settings qobject qcheckbox


    【解决方案1】:

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

    if (cBox)
    

    之前

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

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

    【讨论】:

    • 是的,它不再崩溃,但我仍然有一个 QObject 空值。我检查了名字,他们很好。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 这是我的 settings.ini,它从中获取参数 [Preprocessing] cBoxGain=true cBoxMask=true
    • &lt;item&gt; &lt;layout class="QGridLayout" name="gridLayout"&gt; &lt;item row="4" column="0"&gt; &lt;widget class="QCheckBox" name="cBoxGain"&gt; &lt;property name="enabled"&gt; &lt;bool&gt;false&lt;/bool&gt; &lt;/property&gt; &lt;property name="text"&gt; &lt;string&gt;Gain Error&lt;/string&gt; &lt;/property&gt; &lt;property name="checked"&gt; &lt;bool&gt;true&lt;/bool&gt; &lt;/property&gt; &lt;/widget&gt; &lt;/item&gt; &lt;/layout&gt; &lt;/item&gt; 我通过删除其他 QcheckBox 来缩短我的代码。此外,我的代码总是得到相同的空对象
    • 你搜索过“cBox”(ui->cBox->...),但名字是name="cBoxGain"try ui->cBoxGain(或findChild&lt;QCheckBox*&gt;("cBoxGain")
    猜你喜欢
    • 2018-08-19
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2017-10-21
    • 2012-06-04
    • 2017-11-22
    相关资源
    最近更新 更多