gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:09:53 24 4
gpt4 key购买 nike

我创建了一个自定义 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_listfiltered 列表也被添加到 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;
};

关于c++ - 如何更改 QCompleter 弹出窗口的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45919280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com