bvz*_*bvz 7 qt signals pyqt qcombobox
我正在使用PyQt4,但这很通用,它可以适用于QT.
我有一系列QComboBoxes我从左到右填充(即选择最左边的项目将填充下一个项目.选择该项目中的项目将填充下一个项目,依此类推)
我无法在所有情况下触发信号(即无论当前索引是否发生变化,无论该项是由用户设置还是以编程方式设置).
更多详情:
QCombox每当选择一个项目时,我依靠第一个信号来触发,这样我就可以QCombobox在gui中填充下一个.然后我依靠那个QCombobox发出信号,以便我可以填充下一个信号.等等.
我想QCombobox根据用户与gui的最后一次交互预先选择每个项目.
我有一个独特的功能QCombobox,负责填充和预先选择QCombobox.代码看起来像这样:
comboBox1.blockSignals(True)
comboBox1.clear()
comboBox1.addItems(sorted(itemList))
comboBox1.blockSignals(False)
comboBox1.setCurrentIndex(intLastSavedState1)
Run Code Online (Sandbox Code Playgroud)
where intLastSavedState1是一个整数,该整数派生自用户上次使用该应用时最后选择的文本.我曾希望此函数的最后一行会触发一个信号,该信号会导致下一个组合框的功能加载并预先选择一个项目(comboBox2).然后,该操作将导致下一个comboBox's功能激活,并且它将级联到下一个和下一个.但它并不适用于所有情况.
我试过两个版本的信号:
self.connect(comboBox1, QtCore.SIGNAL("currentIndexChanged(const QString&)"), self.load_comboBox2)
Run Code Online (Sandbox Code Playgroud)
和
self.connect(comboBox1, QtCore.SIGNAL("activated(const QString&)"), self.load_comboBox2)
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,仅当信号intLastSavedState1与组合框中当前选择的内容不同时,才会触发信号.如果用户最后从该列表中选择了项目0,则会导致问题.在这种情况下QT,无法识别我的脚本将当前索引设置为0作为更改(因为在加载框后,它似乎认为它已经在索引0上),因此信号不会触发.
在第二种情况下,无论组合框中当前选择的内容如何,信号都将触发...但仅在用户激活时才会触发.当我的脚本尝试以编程方式设置当前索引时,它不会触发.
这些似乎是我关于信号的唯一两个选择.所以...是否有另一种预先选择项目的方式,QCombobox每次都会触发信号?
嗯...有时候只是提问的行为可以引导你(部分)回答.
我有一个解决方法,但我仍然有兴趣听到有人有更好的想法.
我现在QCombobox以-1加载方式立即以编程方式设置to 的索引.然后,当我以编程方式根据用户的历史记录设置实际索引时,它将始终被视为一个更改(即它永远不会为-1)并且信号将触发
使用: currentIndexChanged(const QString&)
所以我的代码现在看起来像这样:
comboBox1.blockSignals(True)
comboBox1.clear()
comboBox1.addItems(sorted(itemList))
comboBox1.setCurrentIndex(-1)
comboBox1.blockSignals(False)
comboBox1.setCurrentIndex(intLastSavedState1)
Run Code Online (Sandbox Code Playgroud)
我的信号看起来像这样:
self.connect(comboBox1, QtCore.SIGNAL("currentIndexChanged(const QString&)"), self.load_comboBox2)
Run Code Online (Sandbox Code Playgroud)
这个功能......有没有人有更好的主意?
谢谢agian.
| 归档时间: |
|
| 查看次数: |
21560 次 |
| 最近记录: |