Pregunta

I have a combobox with multiple checkbox items and I need to be able to iterate through them and determine if they are checked or even more appropriately, as soon as an item is checked, have an event fire off but I can't seem to get the signal/slot combo working correctly.

Here is some of my code:

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);
}
¿Fue útil?

Solución

I've not tried this, but from looking at the docs you have a signal for QStandardItemModel called itemChanged(QStandardItem *item). What you'd want to do is created a slot named (for example) modelItemChanged(QStandardItem *item) and connect them with connect(assessmentModel, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(modelItemChanged(QStandardItem *))).

That should set your model to trigger the slot whenever an QStandardItem is changed, and it'll pass a pointer to the item that was changed. In your modelItemChanged(QStandardItem *item) function you can then query the QStandardItem *item to see what state it is in.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top