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()); // ... проблема !!! } }
Буду очень благодарен за помощь.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- molni99
- 26 жовтня 2024 р. 08:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 08:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10