2017-08-28 29 views
1

QLineEditのタイプされた単語を含むポップアップ内のすべての項目を表示するカスタムQCompleterクラスを作成しました。QCompleterポップアップの順序を変更する方法は?

あなたがここに見ることができるように今のところ、すべての項目がアルファベット順に並べています

enter image description here

を私は「DAB」と入力し、他の場合は、ポップアップが最初の提案として「DAB」を表示させたいです項目はアルファベット順に表示されます。

私はこのポップアップ順たい:

  • DAB
  • 修正可能
  • 決定可能
  • 分割可能
  • 案内可能
  • spendable
  • を...

これをどのように達成できますか?

これは私が使用しているカスタムQCompleterクラスです:

コード

class MyCompleter : public QCompleter 
{ 
    Q_OBJECT 

public: 
    inline MyCompleter(const QStringList& words, QObject * parent) : 
      QCompleter(parent), m_list(words), m_model() 
    { 
     setModel(&m_model); 
    } 

    // Filter 
    inline void update(QString word) 
    { 
     // Include all items that contain "word". 

     QStringList filtered = m_list.filter(word, caseSensitivity()); 
     m_model.setStringList(filtered); 
     m_word = word; 
     complete(); 
    } 

    inline QString word() 
    { 
     return m_word; 
    } 

private: 
    QStringList m_list; 
    QStringListModel m_model; 
    QString m_word; 
}; 
+1

プロキシを使用モデル:

今ではこのようになります。または、希望の順序で自分でコンプリータモデルを記入してください。 –

答えて

1

私は私のm_listのコピーを作成し、startsWith機能でそれを検索して、それを自分自身をしました。私は見つけたアイテムをtempListに追加し、私が質問したようにc_m_listをフィルタリングしました。 filteredリストもtempListに追加されました。

popup example

コード

class MyCompleter : public QCompleter 
{ 
    Q_OBJECT 

public: 
    inline MyCompleter(const QStringList& words, QObject * parent) : 
      QCompleter(parent), m_list(words), m_model() 
    { 
     setModel(&m_model); 
    } 

    inline void update(QString word) 
    { 
     // Include all items that contain "word". 
     int idx(0); 
     QStringList tempList; 
     QStringList c_m_list(m_list); 

     while (idx < c_m_list.size()) 
     { 
      if (c_m_list.at(idx).startsWith(word,Qt::CaseInsensitive)) 
      { 
       tempList.append(c_m_list.takeAt(idx--)); 
      } 
      idx++; 
     } 

     QStringList filtered = c_m_list.filter(word, caseSensitivity()); 
     c_m_list.sort(); 

     tempList.append(filtered); 

     m_model.setStringList(tempList); 
     m_word = word; 
     complete(); 
    } 

    inline QString word() 
    { 
     return m_word; 
    } 

private: 
    QStringList m_list; 
    QStringListModel m_model; 
    QString m_word; 
}; 
関連する問題