PYQT(或仅QT)。如何在将信号设置为一个值时如何使Qcombobox发射信号(即使不变)
题
我在用 PyQt4
, ,但这足够普遍,可以适用 QT
.
我有一系列 QComboBoxes
我从左到右填充(即选择最左边的项目将填充下一个项目。选择一个项目将填充下一个,依此类推)
在所有情况下,我都很难发射信号(即当前索引是否更改,无论该项目是由用户设置还是在程序上设置)。
更多详情:
我依靠第一个信号 QCombox
to fire whenever an item is selected so that I can populate the next QCombobox
在GUI中。然后我依靠 QCombobox
发出信号以便我可以填充下一个信号。等等。
我想预选每个项目 QCombobox
根据用户与GUI的最后一次交互。
我有一个唯一的功能 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
每次都会触发信号吗?
解决方案
好吧...有时候,提出问题的行为可能会导致您获得(部分)答案。
我有一个工作,但我仍然有兴趣听到有人有更好的主意。
我现在正在编程设置索引 QCombobox
至 -1
加载后立即。然后,当我根据用户的历史记录来编程设置实际索引时,它将始终被视为更改(即永远不会为-1),并且信号将触发
使用: currentIndexChanged(const QString&)
所以我的代码现在看起来像这样:
comboBox1.blockSignals(True)
comboBox1.clear()
comboBox1.addItems(sorted(itemList))
comboBox1.setCurrentIndex(-1)
comboBox1.blockSignals(False)
comboBox1.setCurrentIndex(intLastSavedState1)
我的信号看起来像这样:
self.connect(comboBox1, QtCore.SIGNAL("currentIndexChanged(const QString&)"), self.load_comboBox2)
这个功能...有人有更好的主意吗?
谢谢Agian。