如何更改QCompleter弹出窗口的顺序? |
您所在的位置:网站首页 › qcompleter弹出 › 如何更改QCompleter弹出窗口的顺序? |
我创建了一个自定义的QCompleter类,该类在弹出窗口中显示所有包含QLineEdit键入单词的项。 现在,所有项目都按字母顺序排序,如下所示: 如果我键入“ dab”,然后按字母顺序键入其他项,我希望弹出窗口显示“ dab”作为第一个建议。 我想要这个弹出命令: 轻拍可修正的可决定的可分割的指导性的可消费的... 我怎样才能做到这一点? 这是我正在使用的自定义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; };最佳答案: 我自己创建了m_list的副本,并使用startsWith函数对其进行了搜索。然后,像我在问题中所做的那样,将找到的项目添加到tempList并过滤了c_m_list。 filtered列表也已添加到tempList。 现在看起来像这样: 码 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; }; |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |