我正在使用PyQt4
,但这足够通用,它可以仅适用于QT
.
我有一系列QComboBoxes
我从左到右填充的(即选择最左边的一个项目将填充下一个。选择其中一个项目将填充下一个,依此类推)
我很难让我的信号在所有情况下都触发(即无论当前索引是否更改以及无论该项目是由用户设置还是以编程方式设置)。
更多详情:
I rely on the signals of the first QCombox
to fire whenever an item is selected so that I can populate the next QCombobox
in the gui. 然后我依靠那个QCombobox
来发出一个信号,以便我可以填充下一个。等等。
QCombobox
我想根据用户与 gui 的最后一次交互在每个项目中预先选择一个项目。
我有一个独特的功能 perQCombobox
负责填充和预选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
每次都会触发一个信号?