Qt5 C++ Как получить доступ к элементам из модели для проверки состояния?

У меня есть выпадающий список с несколькими элементами-флажками, и мне нужно иметь возможность перебирать их и определять, проверены ли они или даже более подходящим образом, как только элемент проверен, отключено событие, но я не могу его получить Комбинация сигнал / слот работает правильно.

Вот часть моего кода:

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);
}

1 ответ

Решение

Я не пробовал это, но от просмотра документов у вас есть signal за QStandardItemModel называется itemChanged(QStandardItem *item), То, что вы хотели бы сделать, это создать slot по имени (например) modelItemChanged(QStandardItem *item) а также connect их с connect(assessmentModel, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(modelItemChanged(QStandardItem *))),

Это должно установить вашу модель для запуска slot всякий раз, когда QStandardItem будет изменен, и он передаст указатель на элемент, который был изменен. В вашем modelItemChanged(QStandardItem *item) Функция, которую вы можете запросить QStandardItem *item чтобы увидеть, в каком она состоянии.

Другие вопросы по тегам