Qt 当我调用QWidget->;关闭()

Qt 当我调用QWidget->;关闭(),qt,qt4,qwidget,Qt,Qt4,Qwidget,我想知道当我调用QWidget-close()时会发生什么,我在编写了一个设置函数之后调用了它,这使我的一些插槽无法被调用 before(创建异常行为): pGrpCfg->setupGrpConfig() pGrpCfg->close() pGrpCfg->show() 之后(确定): pGrpCfg->close() pGrpCfg->setupGrpConfig() pGrpCfg->show(); 这是我的职责。我唯一怀疑会对它产生影响的是信号连接(我想补充一下,这些连接是从我使用QS

我想知道当我调用QWidget-close()时会发生什么,我在编写了一个设置函数之后调用了它,这使我的一些插槽无法被调用

before(创建异常行为):

pGrpCfg->setupGrpConfig()
pGrpCfg->close()
pGrpCfg->show()

之后(确定):

pGrpCfg->close()
pGrpCfg->setupGrpConfig()
pGrpCfg->show();

这是我的职责。我唯一怀疑会对它产生影响的是信号连接(我想补充一下,这些连接是从我使用QSignalMapper的构造函数开始的):

void grpConfig::setupGrpConfig(){
断开(信号映射器,信号(映射(int)),此,信号(txgrpcomboxcuritemchanged(const int));

断开(此,信号(txgrpcomboxcuritemchanged(const int)),此,插槽(updateTxFailOrderLayouts(int));

myFPS->getData(请求\系统\配置); int numTxChains=myFPS->SystemData.NumberOfTransmitterChainsInSystem; grpList.clear(); grpList.append(“选择组”); 用于(int i=0;igetData(请求组信息,i); grpcfgelist.at(i)->ui.leGrpName->setText(myFPS->GroupData.Group[i].Name); grpList.append(myFPS->GroupData.Group[i].Name); } 用于(int i=0;igetData(请求发送配置,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)->附加项(grpList); txGrpCBlist.at(i)->setCurrentIndex(myFPS->TransmitterConfigurationData[i]。组+索引\u偏移量); } for(int i=numTxChains;isetVisible(false); txGrpCBlist.at(i)->setVisible(false); }
对于(int i=0;i尝试使用
QWidget::hide()
而不是
close()

尝试使用
QWidget::hide()
而不是
close()

它确切地告诉您它是做什么的。什么类型是
pGrpCfg
? 这将告诉您重新实现的函数版本正在做什么。

它确切地告诉您它是做什么的。什么类型是
pGrpCfg

这将告诉您重新实现的函数版本正在做什么。

答案是:当我调用QWidget->Close()时,这会破坏我的信号连接。信号连接在setupGrpConfig中进行,以便在setupGrpConfig取消信号连接后调用Close。

答案是:当我调用QWidget->Close()时,这会破坏我的信号连接。信号连接是在setupGrpConfig中建立的,以便在setupGrpConfig使信号连接无效后调用close。

为什么否决?文档中说明了函数的功能,而您没有提供足够的信息来帮助回答更多有关它的问题。因为我阅读了t、 我甚至阅读了源代码,还有一些事情没有被告知,因为我在函数setupGrpConfig中连接的信号由于调用顺序而无效。为什么要进行否决?文档中说明了函数的功能,而您没有提供足够的信息来帮助回答更多abo但是它并没有说所有的事情,因为我读了它,我甚至读了源代码,还有一些事情没有被告知,因为我在函数setupGrpConfig中连接的信号由于调用顺序而无效。。 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)));