Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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にしてあげると良いでしょう。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away