QCompleter установка найденного значения по ID
Доброго времени суток.
Пытаюсь разобраться с QCompleter в чем и прошу помощь.
Есть форма документа в которой имеется свойство:
- Q_PROPERTY(ItNew)
- Q_PROPERTY(IdDoc)
... также присутствует
QLineEdit
в которой выбирается пациент (подключен QCompleter) заполняется как задумывал - все устраивает (покаместь, не разобрался с оптимизацией).
Есть условие
ItNew = true
-> можно вводить данные пациента и соответсвенно
ItNew = false
данные нельзя редактировать.
Вопрос заключается в следующем:
1. когда форме документа передается
IdDoc
- считываются данные из БД (.sqlite), определяется
id_pacient
как правильно заполнить
QLineEdit + QCompleter
2. правильно оптимизировать QCompleter
Код инициализации completer
void UserSettings::initSetCompleter() { QString strQuery = "SELECT pacients.id, pacients.name ||' '|| pacients.fName ||' '|| pacients.mName ||', IDNP: '|| pacients.IDNP AS FullName FROM pacients WHERE pacients.deletionMark = 0;"; QMap<int, QString> data = db->getMapDataQuery(strQuery); QMapIterator<int, QString> it(data); while (it.hasNext()) { it.next(); int _id = it.key(); QString _name = it.value(); QStandardItem *item = new QStandardItem; item->setData(_id, Qt::UserRole); item->setData(_name, Qt::DisplayRole); modelPacient->appendRow(item); } completer->setModel(modelPacient); completer->setCaseSensitivity(Qt::CaseInsensitive); ui->editPacient->setCompleter(completer); connect(completer, QOverload<const QModelIndex&>::of(&QCompleter::activated), this, QOverload<const QModelIndex&>::of(&UserSettings::activatedItemCompleter)); }
Слот изменения IdDoc и считывания данных
void UserSettings::slot_IdDocChanged() { if (IdDoc == -1) return; QMap<QString, QString> items; if (db->getObjectDataByMainId("docExamen", "id_doc", IdDoc, items)){ int id_doctor = items.constFind("id_doctors").value().toInt(); int id_nurse = items.constFind("id_nurses").value().toInt(); int id_pacient = items.constFind("id_pacient").value().toInt(); auto startDoctor = modelDoctor->index(0, 0); auto startNurse = modelNurse->index(0, 0); auto startPacient = completer->model()->index(0, 0); auto indexDoctor = modelDoctor->match(startDoctor, Qt::UserRole, QString::number(id_doctor), 1, Qt::MatchExactly); auto indexNurse = modelNurse->match(startNurse, Qt::UserRole, QString::number(id_nurse), 1, Qt::MatchExactly); auto indexPacient = modelPacient->match(startPacient, Qt::UserRole, QString::number(id_pacient), 1, Qt::MatchExactly); // ... проблема !!! if (!indexDoctor.isEmpty()) ui->comboDoctor->setCurrentIndex(indexDoctor.first().row()); else qDebug() << tr("%1 - slot_IdDocChanged()").arg(metaObject()->className()) << tr("... ID: %1").arg(QString::number(id_doctor)); if (!indexNurse.isEmpty()) ui->comboNurse->setCurrentIndex(indexNurse.first().row()); else qDebug() << tr("%1 - slot_IdDocChanged()").arg(metaObject()->className()) << tr("... ID: %1").arg(QString::number(id_nurse)); if (!indexPacient.isEmpty()) ui->editPacient->completer()->setCurrentRow(indexPacient.first().row()); // ... проблема !!! } }
Буду очень благодарен за помощь.
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
- Akiv Doros
- Nov. 11, 2024, 2:58 p.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:50points,
- Rating points-4
- molni99
- Oct. 26, 2024, 1:37 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:80points,
- Rating points4
- molni99
- Oct. 26, 2024, 1:29 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:20points,
- Rating points-10