QCompleter的一些用法

      鉴于工作用的是Qt开发,本人之前有学了一点C#,感觉C#蛮好用的,比如combobox的自动完成补全,就想Qt的QComboBox是否也能有此功能属性。找了半天终于让我找到了QCompleter。它的基本用法也是能实现根据输入自动补全。首先来看看以下基本用法

 QStringList wordList;
 wordList << "alpha" << "omega" << "omicron" << "zeta";

 QLineEdit *lineEdit = new QLineEdit(this);

 QCompleter *completer = new QCompleter(wordList, this);
 completer->setCaseSensitivity(Qt::CaseInsensitive);
 lineEdit->setCompleter(completer);

运行的结果:

当然可以把QLineEdit换成QComboBox,但把QComboBox设置为可以编辑输入。setEditable(true)

 

除了可以补全普通的问题输入外,还可以补全路径:

QFileSystemModel *model = new QFileSystemModel;
    model->setRootPath(QDir::currentPath());

 completer->setModel(model);

QCompleter的一些用法_第1张图片

怎么样,看起来很好用吧。

现在我们来看看这个方法setModel(QAbstractItemMode),它主要是设置completer的数据模型,也就是它显示的一些什么数据。 继承QAbstractItemMode的都可以用于设置completer的数据模型。

 

接下来看看还有什么方法和属性是我们比较关心的:

1、setCompletionMode(CompletionMode mode ),该方法是设置补全的方式,它有三种放松:QCompleter::PopupCompletion(默认情况),QCompleter::InlineCompletion,QCompleter::UnfilteredPopupCompletion

2、setMaxVisibleItems ( int maxItems ),这是在Qt4.6才被引入的一个属性,看方法就知道是用于设置最多可以显示几个数据项。

。。。。

 

现在有个问题,就是completer的数据是创建的时候就给定的,如果我想实现动态的添加,怎么办呢?

先看看我的解决方法吧:

 

connect(lineEdit,SIGNAL(editingFinished ()),this,SLOT(EditComplete()));

 

void Completer::EditComplete()
{
 QString txt = m_pCompleter->currentCompletion();
 if(txt == "")
 {
  wordList<text();
  m_pCompleter->setModel(new QStringListModel(wordList, this));
 }
}

运行结果:

QCompleter的一些用法_第2张图片

QCompleter的一些用法_第3张图片

QCompleter的一些用法_第4张图片

简单解释一下,每次输入数据时,如果没有匹配的项,就添加到wordList,重新设置completer的数据setModel

 

头一回写笔记,文字组织有点生硬,如有错误不足之处,望各位大侠指正

 

你可能感兴趣的:(Qt学习笔记)