PYQT(或仅QT)。如何在将信号设置为一个值时如何使Qcombobox发射信号(即使不变)

StackOverflow https://stackoverflow.com/questions/3965093

  •  09-10-2019
  •  | 
  •  

我在用 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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top