pyqt(またはqt)。 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)
どこ intLastSavedState1
アプリを最後に使用したときにユーザーが最後に選択したテキストから派生した整数です。この関数の最後の行が、次のコンボボックスの関数がアイテムをロードして前選択させる信号を発射することを望んでいました(comboBox2
)。そして、そのアクションは次のものを引き起こします comboBox's
アクティブ化する機能と次のようにカスケードします。しかし、それはすべてのケースで機能していません。
信号の2つのバージョンを試しました。
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にあると思われるため)。したがって、信号は発射されません。
2番目のケースでは、コンボボックスで現在選択されているものに関係なく、信号は発射されます...しかし、ユーザーによってアクティブ化された場合のみ。私のスクリプトが現在のインデックスをプログラムで設定しようとするとき、それは発火しません。
これらは、信号に関する私の唯一の2つのオプションのようです。だから...アイテムを事前に選択する別の方法はありますか 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)
これは機能します...誰かがより良いアイデアを持っていますか?
アギアンに感謝します。