如何更改QCompleter弹出窗口的顺序?

您所在的位置:网站首页 qcompleter弹出 如何更改QCompleter弹出窗口的顺序?

如何更改QCompleter弹出窗口的顺序?

2023-08-15 21:50| 来源: 网络整理| 查看: 265

我创建了一个自定义的QCompleter类,该类在弹出窗口中显示所有包含QLineEdit键入单词的项。

现在,所有项目都按字母顺序排序,如下所示:

enter image description here

如果我键入“ 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