Я использую PyQt4
, но этого достаточно, чтобы оно могло применяться только к QT
.
У меня есть серия QComboBoxes
, которую я заполняю слева направо (т. Е. Выбор элемента в крайнем левом углу заполнит следующий. Выбор элемента в этом заполнит следующий и т. Д.)
У меня возникают трудности с срабатыванием сигналов в любых ситуациях (т. Е. Независимо от того, изменяется текущий индекс или нет, И независимо от того, установлен элемент пользователем или установлен программно).
Подробнее:
Я полагаюсь на сигналы первого QCombox
, чтобы сработать всякий раз, когда элемент выбран, чтобы я мог заполнить следующий QCombobox
в графическом интерфейсе. Затем я полагаюсь на то, что QCombobox
испускает сигнал, чтобы я мог заполнить следующий. И так далее.
Я хочу предварительно выбрать элемент в каждом QCombobox
в зависимости от последнего взаимодействия пользователя с графическим интерфейсом.
У меня есть уникальная функция для QCombobox
, которая отвечает за заполнение и предварительный выбор только этого QCombobox
. Код выглядит примерно так:
comboBox1.blockSignals(True)
comboBox1.clear()
comboBox1.addItems(sorted(itemList))
comboBox1.blockSignals(False)
comboBox1.setCurrentIndex(intLastSavedState1)
где intLastSavedState1
- это целое число, полученное из текста, который последний раз выбирал пользователь во время последнего использования приложения. Я надеялся, что последняя строка этой функции выдаст сигнал, который заставит функцию следующего поля со списком загрузить и предварительно выбрать элемент (comboBox2
). И тогда это действие вызовет активацию следующей функции comboBox's
и будет каскадно переходить к следующему и следующему. Но это работает не во всех случаях.
Я пробовал две версии сигналов:
self.connect(comboBox1, QtCore.SIGNAL("currentIndexChanged(const QString&)"), self.load_comboBox2)
и
self.connect(comboBox1, QtCore.SIGNAL("activated(const QString&)"), self.load_comboBox2)
В первом случае сигнал сработает, только если intLastSavedState1
отличается от того, что в данный момент выбрано в поле со списком. Это вызывает проблему, если пользователь последний раз выбирал элемент 0 из этого списка. В этом случае QT
не распознает мой скрипт, устанавливающий текущий индекс в 0 как изменение (поскольку после загрузки окна кажется, что он уже находится в индексе 0), и поэтому сигнал не срабатывает.
Во втором случае сигнал сработает независимо от того, что в данный момент выбрано в поле со списком ... но только если он активирован пользователем. Он не сработает, когда мой скрипт попытается установить текущий индекс программно.
Похоже, это только мои два варианта в отношении сигналов. Итак ... есть ли другой способ предварительного выбора элементов в QCombobox
, который будет вызывать сигнал каждый раз?