LoginSignup
4
2

More than 5 years have passed since last update.

QComboBoxで、項目が増えたのでキーボードでも補完できるようにしようと思ったときの落とし穴

Posted at

QComboBoxではQStringListから1つの文字列を選ばせるのに使うと便利なやつです。しかも、キーボード補完とかもできます。いいやつですね。でも、単純にeditableをtrueにだけしてはまったのでメモ

よくあるユースケース

  1. コンボボックスが2つあります。
  2. 1つ目のQComboBoxで親項目を選びます
  3. 選んだらその項目に応じて、子供のQComboBoxの値を変更して、子供の値も選べるようにします

editableをtrueにしたときの注意点

親のQComboBoxを選択したときのイベントとしては、currentTextChanged(QString)、currentIndexChanged(QString)、currentIndexChanged(int)あたりのイベントを使っているかと思います。

これはプルダウンメニューとして選択したときには呼ばれます。なので、いくつか先頭の文字をタイプして、カーソルで選択 or マウスで選択したらこれらのイベントハンドラが呼ばれます。

しかし、親項目を正確に全部キーボードで入力したらこのイベントハンドラは呼ばれません。editTextChanged(QString)が呼ばれます。このスロットで、コンテキストメニューに入っているのと同じ文字列であったら、currentTextChanged(QString)をコードから呼び出してあげる、ということが必要です。そうじゃないと、親項目が選択されていない状態になってしまう。

あとは、あくまでもコード補完で、新規項目を使わないのであれば、insertPolicyをNoInsertにしてあげると良いでしょう。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2