QComboBox und QSortFilterProxyModel

Alles rund um die Programmierung mit Qt
Antworten
shaka
Beiträge: 27
Registriert: 8. November 2006 10:36
Wohnort: München

QComboBox und QSortFilterProxyModel

Beitrag von shaka »

Hallo!

Ich würde gerne eine QComboBox haben, deren QListView nur Items anzeigt, die zu dem passen, was man bisher im zugehörigen QLineedit eingegeben hat; also z.B.: Wenn man ein 'a' tippt, erscheinen in der Liste nur noch Items, die mit 'a' anfangen etc. Sollte eigentlich nicht so schwer sein mit QSortFilterProxyModel - dachte ich...

Code: Alles auswählen

	
#include <QApplication>
#include <QComboBox>
#include <QSortFilterProxyModel>
#include <QStringList>

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    QComboBox combo;
    combo.setEditable(true);
    combo.setCompleter(0);
    combo.addItems(QStringList() << "aaa" << "aba" << "bbb" << 42);

    // Set filter model
    QSortFilterProxyModel* pFilterModel = new SortFilterProxyModel(&combo);
    combo.model()->setParent(pFilterModel);
    pFilterModel->setSourceModel(combo.model());
    combo.setModel(pFilterModel);

    // Use entered text as pattern for filter model
    QObject::connect( &combo, SIGNAL(editTextChanged(const QString&)), pFilterModel, SLOT(setFilter(const QString&)) );

    // Ok, do it
    combo.show();
    app.exec();
};

Das Problem ist folgendes: Wenn man einen Buchstaben eingibt, zu dem es kein Item gibt, ist die Listview zunächst leer; dann wird aber automatisch eine leerer String ins Lineedit eingetragen, der dient wiederum als Pattern für das Filter-Model, im Listview erscheinen alle Items, und davon landet schließlich das oberste im Lineedit, or so... Nicht ganz das, was mir vorschwebte.

Weiß jemand Abhilfe?

Danke shaka
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Beschäftige dich mal mit dem QCompleter.
Antworten