PyQt (или просто QT). Как заставить QComboBox запускать сигнал всякий раз, когда для него установлено значение (даже если оно не изменилось)

Я использую PyQt4 , но он достаточно общий, чтобы можно было просто применить к QT .

У меня есть серия QComboBox , которые я заполняю слева направо (т.е. при выборе элемента в крайнем левом углу будет заполнен следующий. При выборе элемента в тот будет заполнять следующий, и так далее)

Мне трудно заставить мои сигналы срабатывать во всех ситуациях (то есть независимо от того, изменяется ли текущий индекс или нет И независимо от того, установлен ли элемент пользователем или установлен программно).

Подробнее подробно:

Я полагаюсь на сигналы первого QCombox , которые срабатывают всякий раз, когда выбирается элемент, чтобы я мог заполнить следующий QCombobox в графическом интерфейсе. Затем я полагаюсь на THAT QCombobox , чтобы испустить сигнал, чтобы я мог заполнить следующий. И т. Д.

Я хочу предварительно выбрать элемент в каждом QCombobox на основе последнего взаимодействия пользователя с графическим интерфейсом.

У меня есть уникальная функция для QCombobox , которая отвечает за заполнение и предварительный выбор только этого QCombobox . Код выглядит примерно так:

comboBox1.blockSignals(True)
comboBox1.clear()
comboBox1.addItems(sorted(itemList))
comboBox1.blockSignals(False)
comboBox1.setCurrentIndex(intLastSavedState1)

где intLastSavedState1 - это целое число, полученное из текста, который в последний раз был выбран пользователем при последнем использовании приложения. Я надеялся, что последняя строка этой функции вызовет сигнал, который заставит следующую функцию поля со списком загрузить и предварительно выбрать элемент ( comboBox2 ). И это действие затем вызовет активацию следующей функции comboBox , и она будет каскадно переходить к следующему и следующему. Но это работает не во всех случаях.

Я пробовал две версии сигналов:

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 , который будет запускать сигнал каждый раз?

7
задан tshepang 7 July 2014 в 11:57
поделиться