私はを使用して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
だから...毎回信号をトリガーするアイテムを事前に選択する別の方法はありますか?