Typically, you call beginModelReset(), change the data, then call endModelReset(). In your case you are changing the data then calling the two reset methods. It probably doesn't make a difference in this particular case, but you should change your code to do it correctly anyway.

I assume you have implemented the data() method for your model. The text displayed by the QCompleter comes from the value returned by the Qt::EditRole role. Be sure your data() method is returning values for this role.

Finally, ensure you are calling QCompleter::setCompletionPrefix() with the QLineEdit text.

BUT the problem with what you are doing is that what you are trying to do manually, looking up partial matches to names from a global database and then supplying them to QCompleter as completion candidates is exactly what QCompleter itself is designed to do.

What you should be doing is giving QCompleter the entire list of names (preferably sorted) (i.e. m_ap.MatchChannel( Glob( "*" ), m_names )) once. All your slot needs to do at that point is to tell QCompleter to set the prefix string (QCompleter::setCompletionPrefix()) to whatever the current text is in the line edit. QCompleter will filter the list of names and send back the correct subset, all without your "help".