Что происходит, когда я вызываю QWidget-> close () - PullRequest
1 голос
/ 19 февраля 2010

Я хотел бы знать, что происходит, когда я вызываю QWidget-close (), я вызвал его после функции установки, которую я кодировал, и это отключило некоторые из моих слотов для вызова.

before (создает странное поведение):
pGrpCfg->setupGrpConfig();<br> pGrpCfg->close();<br> pGrpCfg->show();</p> <p>after(ok):<br><code> pGrpCfg->close();<br> pGrpCfg->setupGrpConfig();<br> pGrpCfg->show();

Это моя функция. Единственное, что я подозреваю, может повлиять на это, это сигнальные соединения (я хотел бы добавить, что эти соединения начинаются в конструкторе, где я использую QSignalMapper):

void grpConfig :: setupGrpConfig () {
отключение (signalMapper, SIGNAL (сопоставленный (int)), this, SIGNAL (txGrpComboBoxCurItemChanged (const int)));

отключить (this, SIGNAL (txGrpComboBoxCurItemChanged (const int)), this, SLOT (updateTxFailOrderLayouts (int)));

myFPS->getData(REQUEST_SYSTEM_CONFIGURATION);
int numTxChains=myFPS->SystemData.NumberOfTransmitterChainsInSystem;
grpList.clear();
grpList.append("Select group");
for(int i=0;i<MAX_GROUPS;i++){
    myFPS->getData(REQUEST_GROUP_INFORMATION,i);
    grpCfgEleList.at(i)->ui.leGrpName->setText(myFPS->GroupData.Group[i].Name);
    grpList.append(myFPS->GroupData.Group[i].Name);
}
for(int i=0;i<numTxChains;i++){

    myFPS->getData(REQUEST_TX_CONFIGURATION,i);
    txNameList.at(i)->setVisible(true);
    txNameList.at(i)->setText(myFPS->TransmitterConfigurationData[i].Name);
    txGrpCBlist.at(i)->setVisible(true);
    txGrpCBlist.at(i)->clear();
    txGrpCBlist.at(i)->addItems(grpList);
    txGrpCBlist.at(i)->setCurrentIndex(myFPS->TransmitterConfigurationData[i].Group+INDEX_OFFSET);

}
for(int i=numTxChains;i<MAX_NUMBER_OF_TRANSMITTERS;i++){
    txNameList.at(i)->setVisible(false);
    txGrpCBlist.at(i)->setVisible(false);
}

for(int i=0;i<MAX_GROUPS;i++){
    updateGrpFailover(i, STAY,-1);
}
//need to wait till setup is complete to activate these signals (populating comboboxes overwrote UDP structs with false data)
connect(signalMapper, SIGNAL(mapped(int)), this, SIGNAL(txGrpComboBoxCurItemChanged(const int)));
connect(this, SIGNAL(txGrpComboBoxCurItemChanged(const int)),this,SLOT(updateTxFailOrderLayouts(int)));
</code>

}

Ответы [ 3 ]

2 голосов
/ 19 февраля 2010

Попробуйте использовать QWidget::hide() вместо close().

1 голос
/ 24 августа 2011

Ответ таков: когда я вызывал QWidget-> Close (), это разрушает мое сигнальное соединение. Сигнальные соединения выполняются в setupGrpConfig, поэтому их следует закрыть после того, как setupGrpConfig аннулирует сигнальные соединения.

1 голос
/ 19 февраля 2010

http://doc.trolltech.com/4.6/qwidget.html#close

Он точно говорит вам, что он делает. Какой тип pGrpCfg? Это скажет вам, что делает повторно реализованная версия функции.

...