Suchfeld mit QLineEdit und QCompleter

Alles rund um die Programmierung mit Qt
Antworten
Developer
Beiträge: 8
Registriert: 17. Juli 2013 11:16

Suchfeld mit QLineEdit und QCompleter

Beitrag von Developer »

Ich habe QLineEdit Widget, das als Suchfeld dient. Bei einer Eingabe wird über das QLineEdit::textChanged(const QString&) Signal eine Anfrage mit dem Suchtext an einen Server gestellt. Über ein Callback erhalte ich die Suchvorschläge vom Server. Daraufhin möchte ich über ein QCompleter die Vorschläge anzeigen. Irgendwie funktioniert die setCompleter() Methode scheinbar nicht in meiner Callback Funktion.

Folgender Code skizziert grob das Problem:

Code: Alles auswählen

void AppWindow::resultCallback(const QStringList &data)
{
    QCompleter *completer = new QCompleter(data, this);
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
    ui->searchfield->setCompleter(completer);
}

void AppWindow::on_searchfield_textChanged(const QString &text)
{
    if (!text.isEmpty())
    {        
        network.search(text); // Server anfragen und Ergebnis über resultCallback() mitteilen
    }
} 
Die Callbackfunktion wird mit einem gefüllten QStringList Objekt aufgerufen, allerdings wird kein Completer sichtbar. Wenn ich die setCompleter() Methode in on_searchfield_textChanged() aufrufe, dann erscheint der Completer. Wieso funktioniert das nicht mit der Callbackfunktion?

lg
Developer
veeman
Beiträge: 280
Registriert: 3. Oktober 2012 01:43
Kontaktdaten:

Re: Suchfeld mit QLineEdit und QCompleter

Beitrag von veeman »

Du musst hierfür ein eigenes Model implementieren, in dem du dein Suchanfrage durchführst, und referenzieren.
Die Verknüpfung zwischen dem LineEdit und dem Completer Object wird nur einmal gesetzt und jegliche Anfragen werden dann automatisch vom Completer-Object bezogen.
Developer
Beiträge: 8
Registriert: 17. Juli 2013 11:16

Re: Suchfeld mit QLineEdit und QCompleter

Beitrag von Developer »

Vielen Dank für die Antwort. Irgendwie simpel, aber genial :D
Hat funktioniert, danke :)
Antworten