qt - PyQt(或简称 QT)。如何让 QComboBox 在设置值(即使未更改)时触发信号

标签 qt pyqt signals qcombobox

我正在使用 PyQt4,但这足够通用,可以仅适用于 QT

我有一系列从左到右填充的 QComboBoxes(即选择最左边的一个项目将填充下一个项目。选择该项目中的一个项目将填充下一个项目,等等上)

我很难在所有情况下触发信号(即,无论当前索引是否更改,也无论该项目是由用户设置还是以编程方式设置)。

更多细节:

每当选择一个项目时,我都会依靠第一个 QCombobox 的信号来触发,以便我可以填充 GUI 中的下一个 QCombobox。然后,我依靠 QCombobox 发出信号,以便我可以填充下一个信号。等等。

我想根据用户上次与 gui 的交互在每个 QCombobox 中预先选择一个项目。

每个 QCombobox 有一个独特的函数,负责填充和预选择该 QCombobox。代码看起来像这样:

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

其中 intLastSavedState1 是一个整数,派生自用户上次使用应用程序时最后选择的文本。我希望这个函数的最后一行会触发一个信号,导致下一个组合框的函数加载并预选一个项目 (comboBox2)。然后,该操作将导致下一个组合框的功能激活,并且它会级联到下一个和下一个。但它并不适用于所有情况。

我尝试了两个版本的信号:

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)

这个功能...有人有更好的主意吗?

谢谢阿吉安。

关于qt - PyQt(或简称 QT)。如何让 QComboBox 在设置值(即使未更改)时触发信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3965093/

相关文章:

c++ - 使用 Qt 跨 HTTP Protocol Buffer 序列化中的空白

c++ - Apple LLVM 下 Qt 4.8.4 QList 的奇怪崩溃

c - sigaction 信号处理程序中的段错误

perl - 在 Solaris 9 上 sleep 时的 SIGALRM

c++ - 启用和禁用粘贴操作

python - 如何在 PyQt 的动态 UI 中覆盖小部件的事件(dropEvent)?

python - QHBoxLayout 以不同的顺序添加小部件

python - 使用 QScintilla 和 PyQt 的自动完成建议中没有 python 关键字

python - QTreeView 与 sqlalchemy

c - 向子进程发送字符串的信号