我有一个QComboBox,应该在CurrentTextChanged上更新。我创建了以下连接语句,以便QComboBox触发onFilterComboBoxCurrentTextChanged插槽:
connect(m_viewController->getFilterWindow()->getFilterComboBox(), &QComboBox::currentTextChanged, this, &MainController::onFilterComboBoxCurrentTextChanged);
clearAndAddDICOMTagsToShownTagsListWidget 会导致以下错误。我该如何解决这个问题?
void MainController::onFilterComboBoxCurrentTextChanged(QString filterName)
{
m_viewController->clearAndAddFilterNamesToFilterComboBox(m_fileController->loadFilterNamesFromConfigFile());
}
QStringList FileController::loadFilterNamesFromConfigFile()
{
QSettings settings(QDir::toNativeSeparators("C:\\HelloWorld\\Config\\Filter.cfg"), QSettings::IniFormat);
QStringList filtersNames = settings.childGroups();
return filtersNames;
}
void ViewController::clearAndAddFilterNamesToFilterComboBox(QStringList filterNames)
{
m_filterWindow.getFilterComboBox()->clear();
m_filterWindow.getFilterComboBox()->addItems(filterNames);
}
QListWidget* FilterWindow::getShownTagsListWidget()
{
return ui.shownTagsListWidget;
}
DoseView.exe中0x777EAFC0(ntdll.dll)的第一次机会异常: 0xC00000FD:堆栈溢出(参数:0x00000001,0x002C2FFC)。
DoseView.exe中0x777EAFC0(ntdll.dll)的未处理异常: 0xC00000FD:堆栈溢出(参数:0x00000001,0x002C2FFC)。
答案 0 :(得分:2)
递归看起来像这样:
如果在组合框对象上执行操作调用blockSignals
时需要停止信号传播。但是,我真的会重新考虑你的app逻辑。我经常使用Qt,并且不需要经常使用blockSignals。
答案 1 :(得分:1)
简单的解决方法是在更新组合框的项目之前阻止信号。像这样:
void MainController::onFilterComboBoxCurrentTextChanged(QString filterName) {
combobox->blockSignals(true);
m_viewController->clearAndAddFilterNamesToFilterComboBox(m_fileController->loadFilterNamesFromConfigFile());
combobox->blockSignals(false);
}
但我相信你应该能够通过更好的代码设计来阻止它。