プログラミング教室


■QLineEdit を QComboBox に変更したい場合の修正箇所

 QLineEdit にヒストリー機能をつけたい時の参考にしてください。

 (1) デザイナーで部品を入れ替える。
  
  
  
  LineEdit を ComboBox に入れ替えする。ここでは部品名は同じにする。気になるなら後から全置換すればいい。
  QComboBox の editable をチェックして、編集可能部品にする。

 (2) Method の変更。
   ui->le_keyword1->setText("");      → ui->le_keyword1->setEditText("");
   m_keyword1 = ui->le_keyword1->text();  → m_keyword1 = ui->le_keyword1->currentText();
   ui->le_keyword1->selectAll();      → ui->le_keyword1->lineEdit()->selectAll();

 (3) コンボにヒストリーをセットする。


    // ヒストリー変数を宣言する。
    QStringList m_keyhistory1;

    // 以下のような関数を作ると便利です。

    // コンボにヒストリーをセットする
    void MainWindow::setComboItem(QComboBox *combo, QStringList &list)
    {
        combo->clear();
        combo->addItems(list);
    }
    
    // ヒストリーに追加する
    void MainWindow::setHistory(QStringList *history, QString str, int max)
    {
        // ヒストリ先頭にセットして、重複は削除
        history->insert(0, str);
        history->removeDuplicates();
        if( history->count() > max ){
            history->removeLast();
        }
    }

    // history を読み込む
    m_keyhistory1 = settings.value("history1", "").toStringList();
    setComboItem(m_le_keyword1, m_keyhistory1);

    // コンプリーターで、大文字/小文字を別扱いに変更する
    QCompleter *completer = new QCompleter(m_keyhistory, this);
    completer->setCompletionMode(QCompleter::InlineCompletion);
    completer->setCaseSensitivity(Qt::CaseSensitive);   // 大文字・小文字は別扱い
    m_le_keyword1->setCompleter(completer);

    // history を書き出す
    settings.setValue("history1", m_keyhistory1);

    // 入力が確定したら、この2つを呼び出します。
    setHistory(&m_keyhistory1, m_keyword1, 50);         // 50個まで記憶します。
    setComboItem(ui->le_keyword1, m_keyhistory1);



  こんなに簡単です。しかも、コンプリート機能までついてるので、入力はかなり便利になります。
  


プログラミング教室 一覧へ