Запретить редактируемый выбор QComboBox при изменении списка элементов - PullRequest
0 голосов
/ 23 июня 2019

У меня есть редактируемый QComboBox, содержащий список идентификационных номеров.

Идентификационные номера представляют устройства, подключенные к системе.Устройства часто добавляются и удаляются во время выполнения.

Назначение редактируемого поля со списком состоит в том, чтобы содержать в своем списке список идентификаторов, прикрепленных в настоящее время, для удобства выбора, но в то же время разрешать пользователювручную ввести идентификаторы устройств, которые в данный момент отсутствуют.Также допустимо вводить пустую строку для идентификатора.

В основном я хочу предоставить пользователю способ ввода произвольного (или нет) идентификатора с дополнительным бонусом быстрого выбора устройств в настоящее время.присоединен (который изменяется во время выполнения).

В настоящее время я не использую модель списка для ведения списка, я просто использую функции добавления и удаления QComboBox.

Мне нужен выбор дляне изменяется, если устройства добавлены или удалены.Однако я сталкиваюсь со следующими проблемами:

  • Когда текущий введенный идентификатор (либо вручную, либо посредством выбора в списке) удаляется из списка, выбор изменяется на другой идентификатор в списке.
  • Когда список пуст и идентификатор вводится вручную или идентификатор не вводится вообще, выбор изменяется при добавлении идентификатора в список.

Есть лиспособ сделать так, чтобы добавление и удаление элементов из поля со списком никогда, никогда не изменял выбор в окне редактирования?Или даже какой-то другой элемент пользовательского интерфейса, который выполняет мою цель?

1 Ответ

2 голосов
/ 24 июня 2019

Перед обновлением поля со списком сохраните текущий выбранный идентификатор (или пустую строку) в темп. переменная. После изменения содержимого поля со списком проверьте, существует ли этот идентификатор в поле со списком (например, с findText()). Если это так, выберите его с помощью setCurrentIndex(). Если это не так, установите его с помощью setCurrentText() или setEditText().

...