У меня есть выпадающий список с несколькими элементами-флажками, и мне нужно иметь возможность перебирать их и определять, проверены ли они или даже более подходящим образом, как только элемент проверен, отключено событие, но я не могу получить Комбинация сигнал / слот работает правильно.
Вот часть моего кода:
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);
}
Я не пробовал это, но от просмотра документов у вас есть 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
чтобы увидеть, в каком она состоянии.
Других решений пока нет …