Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Whiplash от Декабрь 20, 2011, 08:59



Название: QCompleter и контекстный (inline) поиск в модели
Отправлено: Whiplash от Декабрь 20, 2011, 08:59
Здравствуйте, коллеги. Очень хочется, чтобы QCompleter работал не только по началу строки, но и искал совпадения в середине строк. Есть варианты какие-нибудь
реализации? Ну, кроме как совсем отказаться от комплитера и сколхозить что-то своё :)

Эта тема пару раз поднималась, но может с 2009 года что-то изменилось...


Название: Re: QCompleter и контекстный (inline) поиск в модели
Отправлено: Whiplash от Декабрь 21, 2011, 08:07
Нет никакого способа использовать комплитер в таком виде. Нужно либо форкать его, или ждать Qt5, и надеяться, что там функционал будет пошире.


Название: Re: QCompleter и контекстный (inline) поиск в модели
Отправлено: Whiplash от Январь 16, 2012, 11:48
Кстати, если кому интересно, то я пользуюсь вот таким способом:
Код:
QCompleter *completer=cb->completer();
    completer->setCaseSensitivity(Qt::CaseInsensitive);
    QSortFilterProxyModel *filterModel=new QSortFilterProxyModel(completer);
    filterModel->setSourceModel(cb->model());
    filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
    completer->setModel(filterModel);
    completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
    QObject::connect(cb->lineEdit(), SIGNAL(textEdited(QString)), filterModel, SLOT(setFilterRegExp(QString)));
   

cb - это указатель на QComboBox

Плюс, и одновременно минус в том, что QCompleter не отсабклассен.
В принципе, чтобы добиться такого поведения нужно отсабклассить комплитер, и там с прокси-модел поколдовать.