Qt5 C++如何访问模型中的项目以检查状态

Qt5 C++ How do you access items from a model to check state?

本文关键字:项目 状态 检查 模型 C++ 何访问 访问 Qt5      更新时间:2023-10-16

我有一个包含多个复选框项目的组合框,我需要能够对它们进行迭代,并确定它们是否被选中,或者更合适的是,一旦选中一个项目,就启动一个事件,但我似乎无法使信号/插槽组合正确工作。

这是我的一些代码:

void MainWindow::setupQueryBuilder(Ui::MainWindow* ui)
{
    QStandardItemModel* assessmentModel = new QStandardItemModel(3, 1);
    QStandardItem* assessmentPleaseSelect = new QStandardItem();
    QStandardItem* assessmentVisionScreening = new QStandardItem();
    QStandardItem* assessmentHearingAssessment = new QStandardItem();
    QStandardItem* assessmentDevelopmentalAssessment = new QStandardItem();
    assessmentPleaseSelect->setText("Please Select...");
    assessmentPleaseSelect->setFlags(Qt::ItemIsEnabled);
    assessmentPleaseSelect->setData(Qt::CheckStateRole);
    assessmentVisionScreening->setText("Vision Screening");
    assessmentVisionScreening->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
    assessmentVisionScreening->setData(Qt::Unchecked, Qt::CheckStateRole);
    assessmentHearingAssessment->setText("Hearing Assessment");
    assessmentHearingAssessment->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
    assessmentHearingAssessment->setData(Qt::Unchecked, Qt::CheckStateRole);
    assessmentDevelopmentalAssessment->setText("Developmental Assessment");
    assessmentDevelopmentalAssessment->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
    assessmentDevelopmentalAssessment->setData(Qt::Unchecked, Qt::CheckStateRole);
    assessmentModel->insertRow(0, assessmentPleaseSelect);
    assessmentModel->insertRow(1, assessmentVisionScreening);
    assessmentModel->insertRow(2, assessmentHearingAssessment);
    assessmentModel->insertRow(3, assessmentDevelopmentalAssessment);
    ui->SearchAssessmentSelect->setModel(assessmentModel);
}

我没有尝试过,但从文档中可以看出,QStandardItemModelsignal称为itemChanged(QStandardItem *item)。您想要做的是创建一个名为(例如)modelItemChanged(QStandardItem *item)connectslot,它们与connect(assessmentModel, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(modelItemChanged(QStandardItem *)))一起使用。

这应该设置您的模型在QStandardItem更改时触发slot,并且它将传递一个指向已更改项的指针。在modelItemChanged(QStandardItem *item)函数中,您可以查询QStandardItem *item以查看它处于什么状态。