QComboBoxではQStringListから1つの文字列を選ばせるのに使うと便利なやつです。しかも、キーボード補完とかもできます。いいやつですね。でも、単純にeditableをtrueにだけしてはまったのでメモ
よくあるユースケース
- コンボボックスが2つあります。
- 1つ目のQComboBoxで親項目を選びます
- 選んだらその項目に応じて、子供のQComboBoxの値を変更して、子供の値も選べるようにします
editableをtrueにしたときの注意点
親のQComboBoxを選択したときのイベントとしては、currentTextChanged(QString)、currentIndexChanged(QString)、currentIndexChanged(int)あたりのイベントを使っているかと思います。
これはプルダウンメニューとして選択したときには呼ばれます。なので、いくつか先頭の文字をタイプして、カーソルで選択 or マウスで選択したらこれらのイベントハンドラが呼ばれます。
しかし、親項目を正確に全部キーボードで入力したらこのイベントハンドラは呼ばれません。editTextChanged(QString)が呼ばれます。このスロットで、コンテキストメニューに入っているのと同じ文字列であったら、currentTextChanged(QString)をコードから呼び出してあげる、ということが必要です。そうじゃないと、親項目が選択されていない状態になってしまう。
あとは、あくまでもコード補完で、新規項目を使わないのであれば、insertPolicyをNoInsertにしてあげると良いでしょう。