AC
Там. 31, 2021, 12:25 Т.Қ.

QCompleter установка найденного значения по ID

QCompleter

Доброго времени суток.
Пытаюсь разобраться с QCompleter в чем и прошу помощь.
Есть форма документа в которой имеется свойство:
- Q_PROPERTY(ItNew)
- Q_PROPERTY(IdDoc)
... также присутствует QLineEdit в которой выбирается пациент (подключен QCompleter) заполняется как задумывал - все устраивает (покаместь, не разобрался с оптимизацией).
Есть условие ItNew = true -> можно вводить данные пациента и соответсвенно ItNew = false данные нельзя редактировать.
Вопрос заключается в следующем:
1. когда форме документа передается IdDoc - считываются данные из БД (.sqlite), определяется id_pacient как правильно заполнить QLineEdit + QCompleter
2. правильно оптимизировать QCompleter

Код инициализации completer

  1. void UserSettings::initSetCompleter()
  2. {
  3. QString strQuery = "SELECT pacients.id, pacients.name ||' '|| pacients.fName ||' '|| pacients.mName ||', IDNP: '|| pacients.IDNP AS FullName FROM pacients WHERE pacients.deletionMark = 0;";
  4. QMap<int, QString> data = db->getMapDataQuery(strQuery);
  5.  
  6. QMapIterator<int, QString> it(data);
  7. while (it.hasNext()) {
  8. it.next();
  9. int _id = it.key();
  10. QString _name = it.value();
  11.  
  12. QStandardItem *item = new QStandardItem;
  13. item->setData(_id, Qt::UserRole);
  14. item->setData(_name, Qt::DisplayRole);
  15.  
  16. modelPacient->appendRow(item);
  17. }
  18. completer->setModel(modelPacient);
  19. completer->setCaseSensitivity(Qt::CaseInsensitive);
  20.  
  21. ui->editPacient->setCompleter(completer);
  22.  
  23. connect(completer, QOverload<const QModelIndex&>::of(&QCompleter::activated),
  24. this, QOverload<const QModelIndex&>::of(&UserSettings::activatedItemCompleter));
  25. }

Слот изменения IdDoc и считывания данных

  1. void UserSettings::slot_IdDocChanged()
  2. {
  3. if (IdDoc == -1)
  4. return;
  5.  
  6. QMap<QString, QString> items;
  7. if (db->getObjectDataByMainId("docExamen", "id_doc", IdDoc, items)){
  8. int id_doctor = items.constFind("id_doctors").value().toInt();
  9. int id_nurse = items.constFind("id_nurses").value().toInt();
  10. int id_pacient = items.constFind("id_pacient").value().toInt();
  11.  
  12. auto startDoctor = modelDoctor->index(0, 0);
  13. auto startNurse = modelNurse->index(0, 0);
  14. auto startPacient = completer->model()->index(0, 0);
  15.  
  16. auto indexDoctor = modelDoctor->match(startDoctor, Qt::UserRole, QString::number(id_doctor), 1, Qt::MatchExactly);
  17. auto indexNurse = modelNurse->match(startNurse, Qt::UserRole, QString::number(id_nurse), 1, Qt::MatchExactly);
  18. auto indexPacient = modelPacient->match(startPacient, Qt::UserRole, QString::number(id_pacient), 1, Qt::MatchExactly); // ... проблема !!!
  19.  
  20. if (!indexDoctor.isEmpty())
  21. ui->comboDoctor->setCurrentIndex(indexDoctor.first().row());
  22. else
  23. qDebug() << tr("%1 - slot_IdDocChanged()").arg(metaObject()->className())
  24. << tr("... ID: %1").arg(QString::number(id_doctor));
  25.  
  26. if (!indexNurse.isEmpty())
  27. ui->comboNurse->setCurrentIndex(indexNurse.first().row());
  28. else
  29. qDebug() << tr("%1 - slot_IdDocChanged()").arg(metaObject()->className())
  30. << tr("... ID: %1").arg(QString::number(id_nurse));
  31.  
  32. if (!indexPacient.isEmpty())
  33. ui->editPacient->completer()->setCurrentRow(indexPacient.first().row()); // ... проблема !!!
  34.  
  35. }
  36. }
  37.  

Буду очень благодарен за помощь.

1

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

0

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз