Използвайте QObject, намерен от QObjectName

Имам малък проблем в моята програма. Имам конфигурационен файл, поставен в настройките. Извличам от него имената на обекта, който трябва да проверя (това са 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, така че може би е просто нещо. Благодаря и хубав ден :)


person Pico    schedule 07.06.2013    source източник


Отговори (2)


Сигурни ли сте, че е намерен обект? Не мисля така (различно име? грешно оформление?). cBox е 0x0, когато нищо не е намерено. Въпреки това поставете a

if (cBox)

преди

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

и няма да се срине повече, когато не намери обект по име.

person asclepix    schedule 07.06.2013
comment
Да, вече не се срива, но все още имам QObject null. Проверих името и са добри. - person Pico; 07.06.2013

сигурни ли сте, че името (съдържанието на configParam) е правилно? можете да опитате търсенето от QApplication

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

методът findChild извършва рекурсивно търсене, ако обектът съществува в hirachie, той ще бъде намерен. ако обектът не е намерен, може да е:

  • обектът не съществува
  • обектът има друго име
  • обектът или един от неговите предшественици няма (NULL) родител

можете ли да публикувате частта от .ui файла с квадратчето за отметка? би било полезно.

person WoJo    schedule 07.06.2013
comment
Ето моите настройки.ini, откъдето получава параметрите си [Preprocessing] cBoxGain=true cBoxMask=true - person Pico; 07.06.2013
comment
<item> <layout class="QGridLayout" name="gridLayout"> <item row="4" column="0"> <widget class="QCheckBox" name="cBoxGain"> <property name="enabled"> <bool>false</bool> </property> <property name="text"> <string>Gain Error</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> </layout> </item> Съкратих кода си, като изтрих други QcheckBox. Също така винаги получавам един и същ нулев обект с вашия код - person Pico; 07.06.2013
comment
търсихте cBox (ui-›cBox-›...), но името е name="cBoxGain" опитайте ui-›cBoxGain (или findChild<QCheckBox*>("cBoxGain") ) - person WoJo; 09.06.2013