如何在 QGridLayout 中获取 QComboBox 的当前文本?

How Can I get the Current Text of a QComboBox in QGridLayout?

目前我有一个在按下按钮时调用的创建插槽。 Slot 函数需要从它上面的 QGridLayout 中的 ComboBoxes 中获取所有数据。在上面的项目中,并非所有项目都有 QComboBoxes。其中一些是 QLineEdit,另一些是 QLabel。我的 QgridLayout 叫做 ui.testgridLayout.

for (int i = 0; i < ui.testgridLayout->rowCount(); i++)
{
    for (int j = 0; j < ui.testgridLayout->columnCount(); j++)
    {
        QLayoutItem *item= ui.testgridLayout->itemAtPosition(i, j);
        if (item) {
            if (strcmp(item->widget()->metaObject()->className(), "QComboBox")==0) {
                QString objName= item->widget()->objectName();
                QComboBox* cb =ui.testgridLayout->findChild<QComboBox*>(objName);
                string text = cb->currentText().toLocal8Bit().constData();
            }
        }
     }
  }

目前 returns ConfigFileCreation.exe 中 0x00007FFB107DCC8A (Qt5Widgets.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x0000000000000008。如有任何帮助或建议,我们将不胜感激。

问题是您认为放置在布局中的小部件是布局的子项,但不是,这些小部件是建立布局的小部件的子项,所以在您的代码中 "cb" 是导致问题的空指针。解决方法是强制转换并验证指针是否有效:

for (int i = 0; i < ui.testgridLayout->rowCount(); i++){
    for (int j = 0; j < ui.testgridLayout->columnCount(); j++){
        if (QLayoutItem *item= ui.testgridLayout->itemAtPosition(i, j)) {
            if (QComboBox* cb  = qobject_cast<QComboBox*>(item->widget())) {
                string text = cb->currentText().toLocal8Bit().constData();
            }
        }
    }
}